2012-05-01 4 views
-1

私はベクトルクラスにいくつかの問題があります。何らかの理由で、まだ見つかっていない:P、私はベクトルにオブジェクトを挿入できません。私はベクタ、マップ、デュークなどを試みましたが、それらはすべて同じ奇妙な結果を持っています。クラスベクトルのC++の問題

保存したいオブジェクトは、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; 
} 

私は新人のミスがなければならないと確信しているものは...彼らは私を見つけるためにいくつかの時間を消費したときに起こる..私は嫌い。

誰かがこれを手にすることはできますか?

私はそれを感謝:)

をclaifyするには: エラーがありません...それは問題なく動作します...しかし、ベクトル数えます(.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; 

}; 
+6

「動作しない」とはどういう意味ですか?コンパイラエラーが出ますか? –

+2

'DnsAddress'クラスはどのように見えますか? –

+5

問題#1:ヒープ上に 'std :: vector'を割り当て、それを所有するための生ポインタを使用することは、確かに良い考えではありません。 'std :: vector dnss;'の何が間違っていますか?明示的なメモリ管理はメモリ管理のバグにつながり、メモリ管理のバグは痛みにつながります。 –

答えて

0

私はあなたのDnsAddressクラスを賭けるには、コピーコンストラクタが必要です。これは、非ポインタ要素のベクトルに対してpush_backを呼び出すと効果的に呼び出されます。

編集:コピーコンストラクタがあるようです。実際にコピーコンストラクタを削除しただけの場合は、デフォルトのものがうまく動作します。それでも手動で実装したい場合は、コピーコンストラクタの実装で、record1とrecord2をorig.record1とorig.record2に割り当てる必要があります。

+0

エラーはありません...問題なく動作しますが、ベクトルの情報がカウントされます(.size()関数は挿入オブジェクトの数を教えてくれます)。しかし、アクセスしようとすると何も表示されません表示されます...しかし、エラーは発生しません – pedrop

+0

:Pコピーコンストラクタを削除する必要がありました。まあ:P ありがとうたくさん:) – pedrop

1

クラスDnsAddressを表示していないか、エラーの内容を教えてくれていないため、これはちょうど推測です。

私の推測:

  • あなたのクラスのコピーコンストラクタを持っていません(時間のコンパイルエラー)または
  • コピーコンストラクタが正しくコピー(実行時の不正行為を)作っていません。
+0

または、生のポインタをコピーするような、メモリの二重解放などの潜在的な動作につながります。 –

+0

@pedrop: "エラーはありません":ルーキーミス。常にエラーがあります。常に。クラス定義、コピーコンストラクターの実装、またはこのトピックを開始させた動作はまだわかりません。この情報を投稿してください。その情報がなくても私たちができることはすべて推測です。 –