以下编译完全正常:
struct MyClass {
template<typename SameName>
void foo (SameName* p);
};
struct SameName {};
template<class SameName>
void MyClass::foo (SameName* p) {}
Run Code Online (Sandbox Code Playgroud)
但是,如果我们附上MyClass和SameName一些内class Outer再template外定义的函数,编译失败.
struct Outer {
/* paste here `MyClass` & `SameName` from above */
};
template<class SameName>
void Outer::MyClass::foo (SameName* p) {} // <--- error here
// ^^^^^
Run Code Online (Sandbox Code Playgroud)
的克++(03-14)误差是怪异:
error: prototype for ‘void Outer::MyClass::foo(Outer::SameName*)’ does not match any in class ‘Outer::MyClass’
void Outer::MyClass::foo (SameName* p) {}
^~~~~
templateClassMethod.cpp:6:10: error: …Run Code Online (Sandbox Code Playgroud)