2016-12-04 17 views
-4

クラス内のプライベート構造体のためのセッター関数を書き込もうとしています。構造体へのアクセスを許可する宣言メソッドが見つかりませんでした。クラスメンバー関数を使用してプライベート構造体にアクセスする

構造体をクラス外に移動することはできません。この関数はクラスのメンバでなければなりません。フォワード宣言は使用できません。

class Editor 
{ 
public: 
    void setName (string s); 
private: 
    struct Object 
    { 
     string name; 
    }Instance; 
}Ed; 

void Editor::setName (string s) 
{ 
    name = s; // no access 
} 

==================================

class Editor 
{ 
public: 
    friend void setName (Editor &m , string s); 
private: 
    struct Object 
    { 
     int name; 
    }Instance; 
}Ed; 

void setName (Editor &m , string s) 
{ 
    name = s; // no access 
} 

==あなたがそれを行うことはできません。もちろん、================================

class Editor 
{ 
public: 
    friend void setName (Object &m , string s); //invalid declaration ( Object is undefined) 
private: 
    struct Object 
    { 
     string name; 
    }Instance; 
}Ed; 
+2

実際のコードを投稿してください。 – juanchopanza

答えて

1
void Editor::setName (string s) 
{ 
    name = s; // no access 
} 

。 にnameという名前のオブジェクトはありません。ただし、というオブジェクトとnameという名前のオブジェクトがあるInstanceというオブジェクトがあり、その値をInstance.name = s;で設定できます。

+0

'void Editor :: setName(string s) { Instance.name = s; //式は変更可能な左辺値でなければならない } ' – srcs

+0

** **は変更可能な左辺値です。コンパイルしているコードと投稿したコードが異なる場合を除きます。 –

1

何について:

class Editor 
{ 
public: 
    void setName (string s); 
private: 
    struct Object 
    { 
     string name; 
    }Instance; 
}Ed; 

void Editor::setName (string s) 
{ 
    Instance.name = s; 
} 
+0

上記のコメントを参照してください。 「式は変更可能な左辺値でなければなりません」というエラーが発生する(関数のインスタンスを参照) – srcs

関連する問題