无法发现使用另一个 class C++ 的 "friend" 函数的错误
Can't spot the mistake in using "friend" function of another class C++
是的,我知道创建 private
修饰符是为了禁止访问 class 数据
但是 friend
不是为了允许对其进行特殊访问吗?
Compiler:
main.cpp: In member function 'void C::blah(B&)':
main.cpp:48:26: error: 'int B::a' is private within this context
std::cout << obj.a << std::endl;
下面的所有内容都是按照许多教程中的方式实现的。
可能这只是我犯的一个愚蠢的错误,并且没有发现。
class C;
class B {
private:
int a = 2;
public:
friend void blah(B& obj);
};
class C {
public:
void blah(B& obj) {
std::cout << obj.a << std::endl; //*
}
};
*Member B::a is inaccessible
您正在声明一个名为 blah
的非成员函数,而不是 C::blah
作为 friend
。
您可以将代码更改为以下内容,并注意声明和定义的顺序。
class B;
class C {
public:
void blah(B& obj);
};
class B {
private:
int a = 2;
public:
friend void C::blah(B& obj);
};
void C::blah(B& obj) {
std::cout << obj.a << std::endl;
}
是的,我知道创建 private
修饰符是为了禁止访问 class 数据
但是 friend
不是为了允许对其进行特殊访问吗?
Compiler:
main.cpp: In member function 'void C::blah(B&)':
main.cpp:48:26: error: 'int B::a' is private within this context
std::cout << obj.a << std::endl;
下面的所有内容都是按照许多教程中的方式实现的。
可能这只是我犯的一个愚蠢的错误,并且没有发现。
class C;
class B {
private:
int a = 2;
public:
friend void blah(B& obj);
};
class C {
public:
void blah(B& obj) {
std::cout << obj.a << std::endl; //*
}
};
*Member B::a is inaccessible
您正在声明一个名为 blah
的非成员函数,而不是 C::blah
作为 friend
。
您可以将代码更改为以下内容,并注意声明和定义的顺序。
class B;
class C {
public:
void blah(B& obj);
};
class B {
private:
int a = 2;
public:
friend void C::blah(B& obj);
};
void C::blah(B& obj) {
std::cout << obj.a << std::endl;
}