2012-04-23 6 views
0

私はC++ STLコンテナマップの問題に直面しています。STLコンテナについて

class c1 { 

map<int , vector<entity>> mapobject //where entity is a structure 

c1{ 

    entity er; 
    er.entityId = 1; 
    er.nameId = 1; 

    std::vector<entity> record; 
    record.push_back(er); 

    mapobject.insert(std::pair<int,std::vector<entity>>(1,record)); 

} 
} 

私は上記のコードから直面しています問題は、コンストラクタの外に、すべてのstrcutureフィールドは、ガベージ値が含まれています。クラスレベルの変数マップは内容を深くコピーしませんか?

あなたはentityのためにコピーコンストラクタを実装する必要があり、この

--kumar

+0

コードは非常に間違っています。 c1とは何ですか、あなたの関数はどこですか?なぜマップ宣言が文字列ですか? –

+0

'エンティティ'はどのように見えますか? –

+0

上記の構文エラーの幅広い選択以外に、フィールドには迷惑メールが含まれていますか?リリースモードのビルドをデバッグしようとしているだけではありませんか? – RobH

答えて

1

で私を助けてください:

class entity 
{ 
public: 
    entity(const entity& other) 
    {} 
}; 

C++は、デフォルトではない深いコピーオブジェクトを行います。また、コードに構文エラーがいくつかあります。

class c1 { 

map<int , vector<entity>> mapobject; //missing semicolon 

c1() { //missing parameter list 

    entity er; 
    er.entityId = 1; 
    er.nameId = 1; 

    std::vector<entity> record; 
    record.push_back(er); 

    mapobject.insert(std::pair<int,std::vector<entity>>(1,record)); 

} 
}; //missing semicolon 
+0

エンティティが実際には2つの整数メンバしか含まない場合でも、デフォルトのコピーコンストラクタは問題ありません。また、閉じ角括弧の間のmapObject宣言にスペースが追加されない限り、上記はコンパイルされません。 (これはC++ 11でない限り) – RobH

+0

@RobH 'entity'がPOD型であれば動作します。 –

+0

私はコピーコンストラクタを実装しました。それにはコンストラクタの後にガベージ値が含まれています。 –

0

すべての構文エラーが修正されていれば、表示されたコードは問題ありません。あなたは本当にデータが "コンストラクタの外に" "ゴミ"であると確信していますか?デバッガでc1のインスタンスを調べていて、リリースモードビルドをビルドしている場合は、junkが含まれているように見えます。それはちょうどそのような方法でデバッグの人為的なものになるでしょう。

関連する問題