2016-12-04 136 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

相关问题