C++中友元函数编译出错,no match for operator *的问题

最近在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); //这才是真正的声明

  

注意要在后面添加,在前面添加会提示该类没有定义的错误。

原文地址:https://www.cnblogs.com/corineru/p/11983479.html