存取類別中定義的友元函數
在 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中文網其他相關文章!