我正在尝试编译这段非常简单的代码
class myList
{
public:
std::vector<std::string> vec;
class Items
{
public:
void Add(std::string str)
{
myList::vec.push_back(str);
};
}items;
};
int main()
{
myList newList;
newList.items.Add("A");
}
Run Code Online (Sandbox Code Playgroud)
如果不创造更多需要或过于复杂的东西,我该怎么做才能完成这项工作......
ric*_*chq 15
添加几个构造函数和指向父类的指针.
#include <string>
#include <vector>
class myList
{
public:
std::vector<std::string> vec;
myList(): items(this) {} // Added
class Items
{
public:
Items(myList *ml): self(ml) {} // Added
void Add(std::string str)
{
self->vec.push_back(str); // Changed
};
myList *self; //Added
}items;
};
int main()
{
myList newList;
newList.items.Add("A");
}
Run Code Online (Sandbox Code Playgroud)
您需要myList()构造函数,因此它使用内部类成员变量的实例注册自身的实例.然后,您需要Items构造函数来存储指向外部myList类实例的指针.最后在Add方法中,您需要在存储的myList实例中引用vec.
正如Catskul指出的那样,Item构造函数实际上不能对它接收的myList指针做任何事情.我还想说,尽管这个答案更接近原始意图,但steveth45的答案更接近于你想要在真实程序中做什么.
pos*_*ist 11
这样您就不会直接暴露您的班级成员.您的示例似乎过度架构了一下.为什么将std :: vector放入类中然后将其公开为public?
class myList
{
private:
std::vector<std::string> vec;
public:
void Add(std::string str)
{
vec.push_back(str);
};
};
int main()
{
myList newList;
newList.Add("A");
}
Run Code Online (Sandbox Code Playgroud)
与Java不同,C++中的内部对象无法访问外部"this"指针......如果您考虑它,可能会出现无法引用的情况.
Richard Quirk的解决方案是您可以在C++中获得的解决方案