我在尝试重载模板类的<<
运算符时遇到问题,我收到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<<
的定义仍然在同一个文件中。我该如何解决这个问题?无论如何,我最终必须分离出一个头文件。谢谢!