我的Set类中有两个模板化的重载友元函数,它们不断发回错误
Templatedriver.cpp:(.text+0x2a0): undefined reference to `std::ostream& operator<< <int>(std::ostream&, Set<int> const&)'
和
Templatedriver.cpp:(.text+0x2dd): undefined reference to `std::ostream& operator<< <int>(std::ostream&, Set<int> const&)'
依此类推(只需更改为double,char等) 我已经搜索了这个,这里最常见的反应是做一个前向声明,然后在课堂上声明它是朋友,我已经完成了这个并且仍然得到一个未定义的引用
这是我的前瞻声明
template <class T> istream& operator>>(istream&, Set<T>&);
template <class T> ostream& operator<<(ostream&, const Set<T>&);
我在课堂上将它们声明为
template <class T>
class Set {
friend istream& operator>> <>(istream&, Set<T>&);
template <class Y> */friend ostream& operator<< <>(ostream&, const Set<T>&);
....//rest of class
}
这些是定义
template <class T> istream& operator>>(istream& is, Set<T>& S){
S.input();
return(is);
}
template <class T> ostream& operator<<(ostream& os, const Set<T>& S){
S.display();
return(os);
}
还有一些重载的类我遇到了麻烦,但问题都是一样的
答案 0 :(得分:0)
在Set
中,我认为你想使用模板化的朋友声明:
template <typename T>
friend istream& operator>> (istream&, Set<T>&);
这声明在模板参数替换之后匹配的任何函数都是该类的朋友。
(你可能已经有了这个,但我对代码中的*/
感到困惑。我只想说你应该删除<>
。)