5
我有一張以下形式的代碼問題:呼叫到模板成員函數未能編譯
我得到:
template<class Type>
class Class1 {
public:
template<class TypeName1> TypeName1* method1() const {return 0;}
};
struct Type1{};
struct Type2{};
class Class2 {
public:
template<typename TypeName1, typename TypeName2>
int method2() {
Class1<TypeName2> c;
c.method1<TypeName1>();
return 0;
}
int method1() {
return method2<Type1, Type2>();
}
};
int
main() {
Class2 c;
return c.method1();
}
當鍵盤,提供編譯器編譯出現以下錯誤:
t.cpp: In member function 'int Class2::method2()': Line 15: error: expected primary-expression before '>' token compilation terminated due to -Wfatal-errors.
違規行是調用模板成員函數:
c.method1<TypeName1>();
很好的答案。可怕的語言。 – 2013-02-11 12:19:07
工作就像一個魅力,將在5分鐘內接受! – 2013-02-11 12:20:53
+1。特別是在這種情況下,即使'Class1'是前向聲明的,也不能認爲'Class1 :: method1'是模板函數。其他地方的'Class1'的模板專門化可以證明。 –
2013-02-11 12:22:13