2016-12-04 169 views
-4

嘗試爲類內的私有結構編寫setter函數。還沒有找到允許訪問結構的聲明方法。使用類成員函數訪問類內的私有結構

該結構可能不能移出課程。該函數必須是該類的成員。前向聲明可能不被使用。

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 
} 

當然,你不能做那種事。 Editor中沒有名爲name的對象。但是,有一個名爲Instance的對象包含對象名爲name,您可以使用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

相關問題