我无法找到关于以下问题的帖子。 我想写一个litte类,它重载了<< -Operator来获取 使用模板的可变数据类型。我班的.h文件看起来像这样:
class MyClass {
private:
...
public:
template <typename> void operator<<(T data);
};
CPP文件:
template <typename T> void MyClass::operator<<(T data) {
...
return;
}
现在我想用我的班级:
MyClass mc;
mc << "Test";
mc << 123;
但是我的gcc编译器不会编译它给我以下错误信息:
undefined reference to `void MyClass::operator<< <char const*>(char const*)'
或者如果我使用int例如:
undefined reference to `void MyClass::operator<< <int>(int)'
我做错了什么???有人能帮助我吗?
答案 0 :(得分:1)
您必须将实现从.cpp移动到.h文件。您可以直接定义它:
class MyClass {
private:
...
public:
template <class T>
void operator << (const T& data)
{
//do stuff based on T
cout << data << " with size:" << sizeof(T);
}
};