Странно "не удалось вывести аргумент шаблона для ошибки" T"
ошибка в этой код:
//myutil.h
template <class T, class predicate>
T ConditionalInput(LPSTR inputMessage, LPSTR errorMessage, predicate condition);
//myutil.cpp
template <class T, class Pred>
T ConditionalInput(LPSTR inputMessage, LPSTR errorMessage, Pred condition)
{
T input
cout<< inputMessage;
cin>> input;
while(!condition(input))
{
cout<< errorMessage;
cin>> input;
}
return input;
}
...
//c_main.cpp
int row;
row = ConditionalInput("Input the row of the number to lookup, row > 0: ",
"[INPUT ERROR]: Specified number is not contained in the range [row > 0]. "
"Please type again: ", [](int x){ return x > 0; });
ошибка:
Error 1 error C2783: 'T ConditionalInput(LPSTR,LPSTR,predicate)' :
could not deduce template argument for 'T' c_main.cpp 17 1
я боролся с этим в течение нескольких часов, но не могу показаться, чтобы найти решение. Я считаю, что ошибка может быть тривиальной, но я не мог найти никого, кто столкнулся с ошибкой при подобных обстоятельствах. Помощь очень ценится!
EDIT: исправление, сделанное Фредериком Слийкерманом, устраняет одну проблему, но создает другую. На этот раз ошибка:
Error 1 error LNK2019: unresolved external symbol "int __cdecl ConditionalInput<int,class `anonymous namespace'::<lambda0> >(char *,char *,class `anonymous namespace'::<lambda0>)" (??$ConditionalInput@HV<lambda0>@?A0x109237b6@@@@YAHPAD0V<lambda0>@?A0x109237b6@@@Z) referenced in function _main
пожалуйста потерпите и помогите мне решить эту проблему.
3 ответов
C++ не может вывести возвращаемый тип функции. Он работает только со своими аргументами.
Вы должны явно вызвать ConditionalInput<int>(...)
.
Я заметил, что вам также нужно сначала указать тип возврата, если он должен быть вызван явно как Conditional<int>(...)
.
template <class T, class A>
T function (A) { ... }
в то время как следующее приведет к ошибкам компиляции:
template <class A, class T>
T function (A) { ... }