我在使用vector类时遇到了一些麻烦。由于某种原因,尚未找到:P,我不能在我的矢量中插入任何对象。我尝试了矢量,地图,双端队列等,但它们都有相同的奇怪结果。
我想要存储的对象是一个包含2个std :: string的类。这里有一些代码来解释我的观点:
vector<DnsAddress> * dnss = new vector<DnsAddress>;
for(int i = 0; i < ns.size(); i++){
DnsAddress dn;
dn.SetRecord1(record1);
dn.SetRecord2(record2);
cout<<dn.GetRecord1()<<" : "<<dn.GetRecord2()<<endl; //this works, so it is inserting info to the object
dnss->push_back(dn);//this is where it begins to fail...
cout<<dnss->at(i).GetRecord1()<<" : "<<dnss->at(i).GetRecord2()<<endl;//doesn't work
DnsAddress a = dnss->at(0);//this way doesn't work either...
cout<<"dns: "<<a.GetRecord1()<<endl;
}
我确信肯定会有一个新手的错误......我讨厌那些发生的事情......他们花了我一些时间来发现。
有人可以帮忙吗?
我很感激:)
要声明: 没有错误......它没有问题......但是向量中的信息被计算(.size()函数告诉我插入对象的数量)但是当你尝试访问它时,没有显示任何内容......但是没有引起错误
这是课堂DnsAdress:
class DnsAddress {
public:
DnsAddress();
DnsAddress(const DnsAddress& orig);
virtual ~DnsAddress();
void SetRecord2(string record2);
string GetRecord2() const;
void SetRecord1(string record1);
string GetRecord1() const;
private:
string record1;
string record2;
};
答案 0 :(得分:1)
这只是猜测,因为您没有展示您的课程DnsAddress
或告诉我们错误是什么。
我的猜测:
答案 1 :(得分:0)
我敢打赌你的DnsAddress类需要一个拷贝构造函数。当你在非指针元素的向量上调用push_back时,这会被有效地调用。
编辑:看起来你有一个复制构造函数。实际上,如果您刚刚删除了复制构造函数,则默认的工作正常。如果您仍想手动实现它,则需要在复制构造函数实现中将record1和record2分配给orig.record1和orig.record2。