クラスで定義されたフレンド関数へのアクセス
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 中国語 Web サイトの他の関連記事を参照してください。