2017-05-02 3 views
1

fはstruct Yのメンバー関数であり、struct Xのフレンドとして宣言されています。なぜ、fは意図したとおりにXのプライベートメンバーにアクセスできませんか?C++メンバーはフレンドとして機能します

メンバ関数を効果的に作成する方法を理解してください。私は、グローバル関数のアクセス可能な例を友人として簡単に見つけましたが、メンバー関数ではありませんでした。

struct X; 

struct Y { 
    void f(X* a); 
}; 

struct X { 
private: 
    int i; 
public: 
    friend void Y::f(X* a); 
}; 

void Y::f(X* x) { 
    x->i = 0; // Error: member "X::i" (declared at line 9) is inaccessible 
} 
+1

http://ideone.com/goHLoCはどのコンパイラを使用していますか? – Slava

+1

Works for me g ++ 5.1.0 –

+1

これはビジュアルスタジオの場合、intellisenseはエラーを報告するようですが、うまくコンパイルする必要があります。 – AlexG

答えて

-1

Fは仮想化する必要はありませんか?私は間違っている可能性がある。

+0

dvではなく、いいえ、 'Y :: f(X *)'を仮想にすることで違いはありません。 – George

関連する問題