最近在linux上編譯C++的程序,發現很多明明已經實現了的友元類型的operator運算符總是提示 no match for operator xxx,也就是找不到函數的實現。
但是把友元函數換成類成員函數就沒有問題,這確實有點詭異。
經過一番查找發現,原來在類中聲明為友元函數的聲明只是對權限的聲明,因此需要在類定義外添加友元函數真正的聲明。(雖然在VS中完全沒問題,但是在linux下無法通過編譯)
class Expr { public: friend Expr operator+(const Expr& x, const Expr& y); //只是權限的聲明 } Expr operator+(const Expr& x, const Expr& y); //這才是真正的聲明
注意要在后面添加,在前面添加會提示該類沒有定義的錯誤。