访问类中定义的友元函数
在 C 中,可以在类中定义友元函数。友元函数是可以访问类的私有成员和受保护成员的外部函数。通常,友元函数用于使外部模块或函数能够与类成员交互。
问题:
考虑以下代码:
<code class="cpp">class A { public: friend void fun(A a); // Friend function that takes an argument of type A friend void fun2(); // Friend function without arguments friend void fun3(); // Friend function declaration }; void fun(A a) { std::cout << "Im here" << std::endl; } void fun3() { std::cout << "Im here3" << std::endl; } int main() { fun(A()); // Works OK // fun2(); // Error: 'fun2' was not declared in this scope // A::fun2(); // Error: 'fun2' is not a member of 'A' fun3(); // Works OK }</code>
问题:
如何访问好友功能fun2()?
答案:
要访问友元函数 fun2(),需要在类外部显式定义它。目前,fun2() 的定义缺失,这就是编译器无法在全局范围内找到它的原因。
要解决此问题,请将 fun2() 定义为类外部的全局函数:
<code class="cpp">void fun2() { std::cout << "Im here2" << std::endl; }</code>
通过此更改,您应该能够访问 fun2() 而不会遇到任何错误:
<code class="cpp">fun2(); // Works OK</code>
此外,它是为了清晰和可维护性,建议遵循将友元函数定义为类外的单独实体的典型模式:
<code class="cpp">class A { friend void fun(A a); friend void fun2(); friend void fun3(); }; void fun(A a) { std::cout << "I'm here" << std::endl; } void fun2() { std::cout << "I'm here2" << std::endl; } void fun3(); // Leave it as a declaration int main() { fun(A()); fun2(); fun3(); }</code>
以上是如何在类中没有定义参数的情况下访问友元函数?的详细内容。更多信息请关注PHP中文网其他相关文章!