0

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

4

0 回答 0