C++友元函数无法访问类私有成员问题求助
解决友元函数仍无法访问私有成员的问题
嘿,我看到你的问题了——你已经把TWO类的print函数声明为ONE类的友元,但编译器还是提示私有数据成员不可访问对吧?其实问题不在友元声明本身,而是两个容易被忽略的基础细节:
问题根源
- 缺少
<iostream>头文件:cout是C++标准输入输出库的对象,必须包含<iostream>头文件才能使用它,否则编译器无法识别这个符号。 - 未指定
std命名空间:cout属于std命名空间,直接写cout编译器找不到它,要么给它加上std::前缀,要么通过using namespace std;导入命名空间。
修正后的完整代码
#include <iostream> // 必须包含这个头文件才能用cout class ONE; class TWO { public: void print(ONE& x); }; class ONE { private: int a, b; public: friend void TWO::print(ONE& x); ONE() : a(1), b(2) { } }; void TWO::print(ONE& x) { std::cout << "a is " << x.a << std::endl; // 使用std::前缀 std::cout << "b is " << x.b << std::endl; } int main() { ONE xobj; TWO yobj; yobj.print(xobj); return 0; }
或者如果你不想每次都写std::,可以在头文件后面加上using namespace std;(注意:这种方式在小型示例中没问题,但在大型项目中不推荐,避免命名冲突):
#include <iostream> using namespace std; // 导入std命名空间 class ONE; class TWO { public: void print(ONE& x); }; class ONE { private: int a, b; public: friend void TWO::print(ONE& x); ONE() : a(1), b(2) { } }; void TWO::print(ONE& x) { cout << "a is " << x.a << endl; cout << "b is " << x.b << endl; } int main() { ONE xobj; TWO yobj; yobj.print(xobj); return 0; }
验证结果
修正后的代码编译运行后,会输出:
a is 1 b is 2
内容的提问来源于stack exchange,提问作者Shoaib Khan
相关产品推荐
相关产品推荐

