クラス内で定義されたフレンド関数へのアクセス
フレンド関数を使用する場合、その定義とアクセス方法を理解することが重要です。フレンド関数はクラスのメンバーではないため、クラス外でフレンド関数にアクセスするには特別な考慮が必要になる場合があります。
提供されたコード スニペット内:
<code class="cpp">class A { public: friend void fun(A a){std::cout << "Im here" << std::endl;} friend void fun2(){ std::cout << "Im here2" << std::endl; } friend void fun3(); };</code>
フレンド関数 fun() と fun3( ) はクラス内で定義されていますが、グローバル スコープでは宣言されていません。 fun() は、型 A の引数のため、引数依存ルックアップ (ADL) を使用して直接アクセスできますが、fun2() には、グローバル スコープでの宣言がなければアクセスできません。
fun2() に正しくアクセスするには、クラス内でフレンド関数として定義するだけでなく、グローバルに宣言する必要があります:
<code class="cpp">class A { public: friend void fun(A a){std::cout << "Im here" << std::endl;} friend void fun2(); friend void fun3(); }; void fun2(){ std::cout << "Im here2" << std::endl; }</code>
この修正バージョンでは、fun2() はクラスの外で通常の関数としてアクセスできます。
ただし、通常の方法でフレンド関数を定義し、クラスの外でフレンドとして宣言することをお勧めします。
<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();</code>
このアプローチにより、すべてのフレンド関数が正しく定義および宣言され、アクセス可能になり、意図したとおりに使用できます。
以上がクラス内で定義されたフレンド関数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。