免责声明:以下问题可能非常简单,我可能会对第一个答案感到震惊。此外,我想为任何重复的问题道歉 - 句法问题并不总是容易识别是口头解释,因此搜索它们并不容易......
但足够了。我有两个模板化的类,其中一个有模板化的成员函数,另一个类试图调用该函数。最小的错误生成示例如下所示:
#include <iostream>
template <typename T>
class Foo {
public:
Foo() {
}
template <typename outtype>
inline outtype bar(int i, int j, int k = 1) {
return k;
}
};
template <typename T>
class Wrapper {
public:
Wrapper() {
}
double returnValue() {
Foo<T> obj;
return obj.bar<double>(1,2); // This line is faulty.
}
};
int main() {
Wrapper<char> wr;
double test = wr.returnValue();
std::cout << test << std::endl;
return 0;
}
在编译时,这会导致
expected primary-expression before 'double'
expected ';' before 'double'
expected unqualified-id before '>' token
其中所有错误消息都指向代码中标记的链接。
我已经感谢你的想法了,不管它们有多么明显。
答案 0 :(得分:41)
obj.bar<double>(1,2); // This line is faulty.
此处需要template
关键字,因为obj
是依赖于模板参数Foo<T>
的{{1}}类型的实例,所以上面应该写成:
T
请阅读@ Johannes的答案,详细解释:
答案 1 :(得分:4)
经常这样:一旦问题发布,答案就会自行解决。 将故障线纠正为
return obj.template bar<double>(1,2);
产生预期结果。
感谢阅读...
答案 2 :(得分:3)
这可能是foo.template bar‹ double >
的情况吗?