免责声明:以下问题可能非常简单,我可能会对第一个答案感到震惊.此外,我想为任何重复的问题道歉 - 句法问题并不总是容易识别是口头解释,因此搜索它们并不容易......
但足够了.我有两个模板化的类,其中一个有模板化的成员函数,另一个类试图调用该函数.最小的错误生成示例如下所示:
#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;
}
Run Code Online (Sandbox Code Playgroud)
在编译时,这会导致
expected primary-expression before 'double'
expected ';' before 'double'
expected unqualified-id before '>' token
Run Code Online (Sandbox Code Playgroud)
其中所有错误消息都指向代码中标记的linke.
我已经感谢你的想法了,不管它们有多么明显.
Naw*_*waz 48
obj.bar<double>(1,2); // This line is faulty.
Run Code Online (Sandbox Code Playgroud)
的template关键字这里需要,因为obj是一类型的实例Foo<T>,其依赖于模板参数T,并且因此上述应写为:
obj.template bar<double>(1,2); //This line is corrected :-)
Run Code Online (Sandbox Code Playgroud)
请阅读@ Johannes的答案,详细说明如下:
经常这样:问题发布后,答案就全靠它了。将故障线路更正为
return obj.template bar<double>(1,2);
Run Code Online (Sandbox Code Playgroud)
产生预期的结果。
谢谢阅读...