2

不幸的是,我找不到关于我的以下问题的帖子。我想编写一个小类,它重载 <<-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)'

我究竟做错了什么???有人能帮我吗?

4

1 回答 1

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);
        }
};
于 2013-11-13T15:15:36.803 回答