c ++模板类运算符<<超载

时间:2016-09-07 10:23:48

标签: c++ operator-overloading template-classes

我在尝试重载模板类的<<运算符时遇到问题,我收到error LNK2019: unresolved external symbol错误。代码如下:

template <class T> 
struct subvec {

    T vec[NDIMS];
    ...
    friend std::ostream& operator<<(std::ostream&, const subvec<T>&);
};
...
template <class T>
std::ostream& operator<<(std::ostream& output, const subvec<T>& s) { 
    ...
    return output;
}
...
template subvec<int>;
...
int main() {
    subvec<int> S(0);
    cout << S;
    return;
}

所有代码都在同一个.cpp文件中。它编译得很好,但似乎与cout<<S行有链接问题。如果我发表评论,其他一切都很好。 我已经搜索了一些有关类似问题的其他帖子,但没有找到答案。我能使其工作的唯一方法是将operator<<的定义复制到struct subvec<T>的定义中,而不是将其放在外面。但我对operator<<的定义仍然在同一个文件中。我该如何解决这个问题?无论如何,我最终必须分离出一个头文件。谢谢!

0 个答案:

没有答案