类向量c ++问题

时间:2012-05-01 17:49:20

标签: c++ class vector

我在使用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;

};

2 个答案:

答案 0 :(得分:1)

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

我的猜测:

  • 您的类没有复制构造函数(编译时错误)或
  • 复制构造函数没有制作正确的副本(运行时错误行为)。

答案 1 :(得分:0)

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

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