C++ - 友元运算符无法访问私有数据成员
C++ - friend operator cannot access private data members
我正在尝试为 class:
重载运算符
#include <iostream>
using namespace std;
class Complex{
float re, im;
public:
Complex(float x = 0, float y = 0) : re(x), im(y) { }
friend Complex operator*(float k, Complex c);
};
Complex operator*(float k, Complex c) {
Complex prod;
prod.re = k * re; // Compile Error: 're' was not declared in this scope
prod.im = k * im; // Compile Error: 'im' was not declared in this scope
return prod;
}
int main() {
Complex c1(1,2);
c1 = 5 * c1;
return 0;
}
但是好友函数无法访问私有数据。当我添加对象名称时,错误得到解决:
Complex operator*(float k, Complex c) {
Complex prod;
prod.re = k * c.re; // Now it is ok
prod.im = k * c.im; // Now it is ok
return prod;
}
但根据我正在阅读的注释,第一个代码应该可以正常运行。如何在不添加对象名称(re
而不是 c.re
)的情况下修复错误?
在第一个 operator*
情况下,re
和 im
对编译器来说是完全未知的,因为在这种情况下函数 operator*
是在全局 space(范围)。
在 operator*
的第二个示例中,您通过使用 class Complex c
的对象来赋予 re
和 im
含义 - 在在这种情况下,编译器知道 class Complex
的定义(如上定义),并且它的成员 re
和 im
也是已知的——这就是为什么你没有得到一个第二个示例中的错误消息。
我正在尝试为 class:
重载运算符#include <iostream>
using namespace std;
class Complex{
float re, im;
public:
Complex(float x = 0, float y = 0) : re(x), im(y) { }
friend Complex operator*(float k, Complex c);
};
Complex operator*(float k, Complex c) {
Complex prod;
prod.re = k * re; // Compile Error: 're' was not declared in this scope
prod.im = k * im; // Compile Error: 'im' was not declared in this scope
return prod;
}
int main() {
Complex c1(1,2);
c1 = 5 * c1;
return 0;
}
但是好友函数无法访问私有数据。当我添加对象名称时,错误得到解决:
Complex operator*(float k, Complex c) {
Complex prod;
prod.re = k * c.re; // Now it is ok
prod.im = k * c.im; // Now it is ok
return prod;
}
但根据我正在阅读的注释,第一个代码应该可以正常运行。如何在不添加对象名称(re
而不是 c.re
)的情况下修复错误?
在第一个 operator*
情况下,re
和 im
对编译器来说是完全未知的,因为在这种情况下函数 operator*
是在全局 space(范围)。
在 operator*
的第二个示例中,您通过使用 class Complex c
的对象来赋予 re
和 im
含义 - 在在这种情况下,编译器知道 class Complex
的定义(如上定义),并且它的成员 re
和 im
也是已知的——这就是为什么你没有得到一个第二个示例中的错误消息。