我已經閱讀了幾個有關我的問題在stackoverflow現在,並沒有似乎解決我的問題。或者我也許做錯了... 超載<<
如果我把它變成一個內聯函數。但是我怎麼讓它在我的情況下工作?重載朋友operator <<模板類
warning: friend declaration std::ostream& operator<<(std::ostream&, const D<classT>&)' declares a non-template function
warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
/tmp/cc6VTWdv.o:uppgift4.cc:(.text+0x180): undefined reference to operator<<(std::basic_ostream<char, std::char_traits<char> >&, D<int> const&)' collect2: ld returned 1 exit status
template <class T>
T my_max(T a, T b)
{
if(a > b)
return a;
else
return b;
}
template <class classT>
class D
{
public:
D(classT in)
: d(in) {};
bool operator>(const D& rhs) const;
classT operator=(const D<classT>& rhs);
friend ostream& operator<< (ostream & os, const D<classT>& rhs);
private:
classT d;
};
int main()
{
int i1 = 1;
int i2 = 2;
D<int> d1(i1);
D<int> d2(i2);
cout << my_max(d1,d2) << endl;
return 0;
}
template <class classT>
ostream& operator<<(ostream &os, const D<classT>& rhs)
{
os << rhs.d;
return os;
}
有最近關於這可能是有益的一個問題:http://stackoverflow.com/questions/4571611/virtual-operator/ – 2011-01-11 16:52:00
@Daniel - 它不會佔用我爲模板類重載時遇到的問題 – starcorn 2011-01-11 16:55:12
我認爲如果不用給定的答案修改問題會更好。這使得更難確定原來的問題是什麼。你可能想在最後加上一個** EDIT **來解決這個問題,但是我發現當問題發生超時並且我不得不拉起歷史來查看實際上在第一名。 – 2011-01-11 19:13:12