我将多个对象存储在指向这些对象的指针向量中,就像在C ++中一样:
vector<Host *> somevector;
然后我按照这样初始化每个项目:
somevector.push_back(new Host(x));
该对象采用初始化参数。 当我读取数据(字符串)并最终得到一个对象指针列表时,我将它们添加到对象本身内部的内部向量中:
somevector.at(i)->add(string data);
但是,似乎所有数据都已添加到同一个对象中,即使对象具有不同的名称,它们存储此数据的内部向量也是相同的。
我搜索了各种关键字来解决这个问题,我认为这是一个复制构造函数的问题(我目前使用的是默认值)。如何解释我正在复制的对象内的向量?我是否必须在对象中创建一个字段,以便在复制构造函数中创建一个新的文件?
编辑:
我已经复制了对象类的代码:
vector<string> v;
Host::Host(string _x): x(_x)
{
}
Host::~Host()
{
}
string Host::name()
{
return x;
}
string Host::link(int r)
{
int i = r % v.size();
return v.at(i);
}
void Host::add(string data)
{
v.push_back(data);
}
所以我在宿主对象中使用这个向量来存储一堆字符串。然后,当我从我的主程序调用链接时,我传递一个随机数,我想从对象内的列表中获取一个随机字符串。但是,我的link()调用将返回不应存储到对象中的字符串。
答案 0 :(得分:1)
从我发布的示例代码中我看到的'v'不是Host的成员对象。所以调用Host :: add只是简单地推回到全局可用的向量。这可能是您的问题所在吗?