2012-04-23 3 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)); 

} 
} 

Проблема, с которой я столкнулся из приведенной выше коды, вне конструктора, все поля содержат значение Страницы данного мусора. Будет ли переменная класса - карта не будет глубоко скопировать содержимое?

Пожалуйста, помогите мне в этом

--kumar

+0

Ваш код -. Что такое c1, где ваша функция, почему объявление карты является строкой? –

+0

Как выглядит 'entity'? –

+0

Помимо широкого выбора синтаксических ошибок выше, вы уверены, что поля содержат нежелательные файлы? Вы не просто пытаетесь отладить сборку в режиме релиза, не так ли? – RobH

ответ

1

Вам необходимо осуществить копию-конструктор для entity:

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

Если объект действительно содержит только два целочисленных члена, конструктор копии по умолчанию будет в порядке. Кроме того, вышесказанное не будет компилироваться, если в объявлении mapObject между скобками угла закрытия не добавлено пробел. (Если это не C++ 11?) – RobH

+0

@RobH, если 'entity' был POD-типом, он будет работать. –

+0

Я реализовал экземпляр конструктора. Если он содержит значения мусора после конструктора. –

0

код, который вы показали бы хорошо, если все ошибки синтаксиса будут исправлены. Вы уверены, что данные действительно являются «мусором» «вне конструктора»? Если вы проверяете экземпляр c1 в отладчике, но создали сборку в режиме release, он, как представляется, будет содержать мусор. Это будет просто артефактом отладки.

Смежные вопросы