最近在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); //这才是真正的声明
注意要在后面添加,在前面添加会提示该类没有定义的错误。