我想在我的代碼中超載運算符< <。如果我註釋掉我嘗試在我的自定義類中使用<運算符的行,它編譯得很好。該錯誤幾乎看起來像它不喜歡C++庫(?)。重載運算符<< C++;未定義的參考`std :: basic_ostream
我對這個問題的所有研究都表明它是一個鏈接問題。大多數人建議使用g ++而不是gcc。我正在使用g ++作爲我的編譯器,並且仍然出現此錯誤。
代碼:
#include <iostream>
using namespace std;
//prototype the class and the functions
template<class T> class strange;
template<class T> ostream& operator<< (ostream& osObject, strange<T>& sObject);
//begin class
template <class T>
class strange
{
public:
// .... function prototypes go here.
strange(T x,T y);
friend ostream& operator<< <> (ostream& osObject, strange<T>& sObject);
private:
T a;
T b;
};
// .... your function definitions go here
template <class T>
strange<T>::strange(T first, T second){
a = first;
b = second;
}
template <class T>
ostream& operator<< (ostream& osObject, const strange<T>& sObject){
osObject << sObject.a << ", " << sObject.b;
return osObject;
}
int main()
{
strange<int> x1(4,6) , x2(12,2) ;
//strange<char> y1('m','n') , y2('m','n') ;
cout << "x1 = " << x1 << endl;
return 0;
}
錯誤:
test.cpp:(.text+0x7a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& operator<< <int>(std::basic_ostream<char, std::char_traits<char> >&, strange<int>&)'
collect2: ld returned 1 exit status
任何想法是什麼原因造成的?
難道你的操作符定義是在'.cpp'文件中,而不是在頭部? – juanchopanza
不會 '#包括;' 和 'using namespace std;' 照顧(ostream&)? –
Jeff
不,您的*模板代碼必須通過包含來訪問。 – juanchopanza