2016-07-22 8 views
1

私は別のクラスの友人としてクラスメンバー関数を指定しようとしていますが、 ですが、保護されているメンバーやプライベートメンバーではない公開メンバーのみにアクセスできます。無料の機能でうまくいきます。他のクラスへのC++クラスの機能の友だち

のVisual Studioエラー:

member "Class1::protected_int" (declared at line 9) is inaccessible 
member "Class1::private_int" (declared at line 11) is inaccessible 
class Class2; 

class Class1 { 
    friend void Class2::TEST(const Class1& ex); 
    friend void TEST(const Class1& ex); 

public: 
    int public_int; 
protected: 
    int protected_int; 
private: 
    int private_int; 
}; 

class Class2{ 
public: 
    void TEST(const Class1& ex); 
}; 

void Class2::TEST(const Class1& ex){ 
    int pub = ex.public_int; 
    int pro = ex.protected_int; 
    int pri = ex.private_int; 
} 

void TEST(const Class1& ex){ 
    int pub = ex.public_int; 
    int pro = ex.protected_int; 
    int pri = ex.private_int; 
} 

Image

答えて

3

プログラムは、すでにここ悪い形成されている:あなたがメンバーにアクセスすることはできませんので

friend void Class2::TEST(const Class1& ex); 

Class2は、不完全ですまだそれの。

class Class1; 

class Class2{ 
public: 
    void TEST(const Class1& ex); 
}; 

class Class1{ 
    friend void Class2::TEST(const Class1& ex); 
    friend void TEST(const Class1& ex); 

    // ... 
}; 

すべてが完璧になるようにコードの順序を変更すると、すべてが正常にコンパイルされます。

+0

これは私自身も同様です。しかし、これは 'Class1'と' Class2'の間に '循環的な友情'があるときには役に立ちません。 – lorro

+0

ありがとう、あなたは私の日を救った:) – Ashraf47

関連する問題