我在一个类里重载了赋值运算符,把它声明为类的友元, 编译出错:"operator ="必须是非静态成员。
网上查了一下,知道了赋值运算符必须声明为成员函数,但不知道声明为友员时的那个报错是什么意思。静态成员不是前面要加static的吗,我声明为友员的时候又没有加static...
网上查了一下,知道了赋值运算符必须声明为成员函数,但不知道声明为友员时的那个报错是什么意思。
静态成员不是前面要加static 的吗,我声明为友员的时候又没有加static 展开
静态成员不是前面要加static 的吗,我声明为友员的时候又没有加static 展开
展开全部
c++中 有四个操作符不能是全局域中的重载,这四个操作符是:=, ->, operator[ ], operator()。
所以=的重载不能声明成类的友元。而且函数operator=默认是静态成员函数,所以只能访问静态数据成员
你没贴代码,我就举个例子吧:
class A {
public:
A &operator=(A &a); //ok 正确
friend A &operator=(const char *s); //错误,友元不属于成员函数
private:
int _size;
char *_string;
};
所以=的重载不能声明成类的友元。而且函数operator=默认是静态成员函数,所以只能访问静态数据成员
你没贴代码,我就举个例子吧:
class A {
public:
A &operator=(A &a); //ok 正确
friend A &operator=(const char *s); //错误,友元不属于成员函数
private:
int _size;
char *_string;
};
参考资料: c++primer
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询