c++ class 函数 friend to another class
c++ class function friend to another class
我正在尝试将一个 class 成员函数指定为另一个 class 的友元函数,
但它只允许我访问 public 成员,而不是受保护或私有成员。它与免费功能配合得很好。
Visual Studio 错误:
member "Class1::protected_int" (declared at line 9) is inaccessible
member "Class1::private_int" (declared at line 11) is inaccessible
class Class2;
class Class1 {
friend void Class2::TEST(const Class1& ex);
friend void TEST(const Class1& ex);
public:
int public_int;
protected:
int protected_int;
private:
int private_int;
};
class Class2{
public:
void TEST(const Class1& ex);
};
void Class2::TEST(const Class1& ex){
int pub = ex.public_int;
int pro = ex.protected_int;
int pri = ex.private_int;
}
void TEST(const Class1& ex){
int pub = ex.public_int;
int pro = ex.protected_int;
int pri = ex.private_int;
}
这里的程序已经是错误的:
friend void Class2::TEST(const Class1& ex);
Class2
不完整,因此您还不能访问其中的成员。如果您重新排序您的代码,以便在需要时完成所有内容:
class Class1;
class Class2{
public:
void TEST(const Class1& ex);
};
class Class1{
friend void Class2::TEST(const Class1& ex);
friend void TEST(const Class1& ex);
// ...
};
然后一切都可以正常编译。
我正在尝试将一个 class 成员函数指定为另一个 class 的友元函数, 但它只允许我访问 public 成员,而不是受保护或私有成员。它与免费功能配合得很好。
Visual Studio 错误:
member "Class1::protected_int" (declared at line 9) is inaccessible
member "Class1::private_int" (declared at line 11) is inaccessible
class Class2;
class Class1 {
friend void Class2::TEST(const Class1& ex);
friend void TEST(const Class1& ex);
public:
int public_int;
protected:
int protected_int;
private:
int private_int;
};
class Class2{
public:
void TEST(const Class1& ex);
};
void Class2::TEST(const Class1& ex){
int pub = ex.public_int;
int pro = ex.protected_int;
int pri = ex.private_int;
}
void TEST(const Class1& ex){
int pub = ex.public_int;
int pro = ex.protected_int;
int pri = ex.private_int;
}
这里的程序已经是错误的:
friend void Class2::TEST(const Class1& ex);
Class2
不完整,因此您还不能访问其中的成员。如果您重新排序您的代码,以便在需要时完成所有内容:
class Class1;
class Class2{
public:
void TEST(const Class1& ex);
};
class Class1{
friend void Class2::TEST(const Class1& ex);
friend void TEST(const Class1& ex);
// ...
};
然后一切都可以正常编译。