-1

我在使用矢量类时遇到了一些问题。出于某种原因,尚未找到: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;

};
4

2 回答 2

1

这只是一个猜测,因为您没有展示您的课程DnsAddress或告诉我们错误是什么。

我猜:

  • 您的类没有复制构造函数(编译时错误)或
  • 复制构造函数没有制作正确的副本(运行时错误行为)。
于 2012-05-01T17:55:49.087 回答
0

我敢打赌你的 DnsAddress 类需要一个复制构造函数。当您在非指针元素的向量上调用 push_back 时,这会有效地调用。

编辑:看起来你确实有一个复制构造函数。实际上,如果您只是删除了复制构造函数,那么默认的构造函数就可以正常工作。如果您仍想手动实现它,则需要在复制构造函数实现中将 record1 和 record2 分配给 orig.record1 和 orig.record2。

于 2012-05-01T17:55:30.980 回答