-1

ベクトルクラスに問題があります。何らかの理由で、まだ見つかりません:P、ベクトルにオブジェクトを挿入できません。vector、map、dequeなどを試しましたが、すべて同じ奇妙な結果になります。

保存したいオブジェクトは、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 に答える