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