error: expected primary-expression before ‘>’: templated function that try to uses a template method of the class for which is templated
当使用模板和函数(这个问题中不存在)时,我最终得到了以下简化的问题。
以下代码(此处也提供)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class A { public: template <class T> bool isGood(int in) const { const T f; return in < f.value(); } }; class B { public: int value() const {return 10;} }; template <class T> bool tryEvaluator(T& evaluator, int value) { return evaluator.isGood(value); } int main( int argc, const char* argv[] ) { const A evaluator; evaluator.isGood(20); //Seemingly no problem here tryEvaluator(evaluator,20); return 0; } |
生成错误
1 2 3 | main.cpp:18:34: error: expected primary-expression before ‘>’ token return evaluator.isGood(value); ^ |
是否可以执行我正在尝试的操作?我需要添加一些关键字吗?
还有,附带问题,我应该如何更好地重新命名我的问题?
在
在您的例子中,
当使用依赖类型或该类型的变量时,需要给编译器一些额外的帮助。
编译器希望能够在代码实际填充实例化中的
所以
您必须告诉编译器,
在您的
在
1 2 3 4 5 | template <class T> bool tryEvaluator(T& evaluator, int value) { return evaluator.template isGood(value); ^^^^^^^^ } |
必须明确地告诉编译器,