下面的代码工作正常,一个简单的模板类,有一个定义和一个使用
#include <string>
#include <iostream>
using namespace std;
template<class T> class foo{
public:
string what();
};
template<class T> string foo<T>::what(){
return "foo of type T";
}
int main(){
foo<int> f;
cout << f.what() << endl;
}
如果我然后添加以下内容(在 main 之上,但在模板类 foo 的声明之后;)
template<> class foo<char>{
public:
string what();
};
template<> string foo<char>::what(){
return "foo of type char";
}
我从 g++ 得到一个错误
第 19 行:错误:'std::string foo::what()' 的模板 ID 'what<>' 与任何模板声明都不匹配
这是一个显示错误的键盘: http: //codepad.org/4HVBn9oJ
我犯了什么明显的错误?或者这对于 c++ 模板是不可能的?定义所有内联方法(使用 template<> foo 的定义)有效吗?
再次感谢大家。