Russian Qt Forum

Программирование => С/C++ => Тема начата: kofr от Июнь 07, 2017, 14:17



Название: Ошибка с шаблонами
Отправлено: kofr от Июнь 07, 2017, 14:17
вот прототип функции

Код:
template<class ReturnType> 
ReturnType getValue(const QString &t_tableName, const QString &t_columnName)

вот я ее вызываю
Код:
getValue<QString>("user", "name");

вот ошибка которую он пишет
error: no matching function for call to 'PersistantStorageSyncWorker::getValue(const char [5], const char [5]) const'
return getValue<QString>("user", "name");
^

вопрос, что над о сделать чтобы он принимал литералы для QString


Название: Re: Ошибка с шаблонами
Отправлено: kambala от Июнь 07, 2017, 15:07
оберни их в QStringLiteral или QLatin1String


Название: Re: Ошибка с шаблонами
Отправлено: mitrich от Июнь 07, 2017, 15:21
GCC 4.8.2, GCC 5.3, VC2015 - всё работает:
Код
C++ (Qt)
template<typename ReturnType>
ReturnType getValue(const QString &s1, const QString &s2)
{
   return "Hello";
}
//...
QString s = getValue<QString>("user", "name");
 
???


Название: Re: Ошибка с шаблонами
Отправлено: __Heaven__ от Июнь 07, 2017, 17:10
Проблема, скорее всего, что экземпляр, к которому метод применяется константный, а сам метод объявлен как неконстантный.


Название: Re: Ошибка с шаблонами
Отправлено: __Heaven__ от Июнь 07, 2017, 17:10
Точнее вызов getValue производится из константного метода


Название: Re: Ошибка с шаблонами
Отправлено: kofr от Июнь 07, 2017, 20:42
Проблема была в константности. Решена. Спасибо за ответ