2017-01-02 2 views
1

У меня возникла эта проблема на некоторое время, и мне хотелось бы на это высказать мнение. Если у вас есть лучший способ сделать это, скажите мне. Все работает хорошо, за исключением случаев, когда я пытаюсь получить доступ к вектору для элементов внутри объекта, который он никогда не выполняет. Всегда говорит, что он пуст.Почему моя попытка добавить к вектору внутри структуры внутри вектора внутри структуры сбой?

struct sObj{ 
    char itemName[64]; 
    int itemStrenght; 
}; 

struct sEnt{ 
    char entityName[64]; 
    vector<sObj> entityItems; 
}; 

class cTemp{ 
public: 
    void addEntity(sEnt entity){ entityList.push_back(sEnt); } 
    void addItemToEnt(char* entityName, sObj itemDetails); 
    void setAllItemStrenght(char* itemName, int newStr); 
private: 
    vector<sEnt> entityList; 
}; 

void cTemp::addItemToEnt(char* entityName, sObj itemDetails){ 
    for(auto m : entityList){ 
     if(!_stricmp(m.entityName, entityName)){ 
      m.entityItems.push_back(itemDetails); 
      m.entityItems.push_back(itemDetails); // just for testing 
      msgBox("Item count: %i", m.entityItems.size()); // is working 
     } 
    } 
} 

void cTemp::setAllItemStrenght(char* itemName, int newStr){ 
    for(auto m : entityList){ 
     msgBox("Item count: %i", m.entityItems.size()); // returns 0 
     for(auto n : m.entityItems){ 
      // never gets executed 
     } 
    } 
} 
+0

Где позвонить 'addItemToEnt'? Если вектор пуст, возможно, это потому, что вы его никогда не заполняете. –

+1

Кстати, вы должны использовать 'std :: string' –

+0

. Я все правильно звоню. Вышеприведенный код является лишь примером моей проблемы. Не настоящий код, так как я хотел сделать это коротко для сообщения. Фрэнк ответил на точную проблему. И @GuillaumeRacicot, возможно. Но так, как я писал все до сих пор, использует char. И теперь это работает. Я возьму ваш совет и интегрирую его. Спасибо. – GreySkull

ответ

5

вопрос здесь:

void cTemp::addItemToEnt(char* entityName, sObj itemDetails){ 
    for(auto m : entityList){ 

Ваш цикл работает над значениями, скопированными из entryList, а не ссылки на них. Вы хотите:

for(auto& m : entityList){ 
+0

Большое спасибо. Я полностью забыл об этом. Вы просто спасли меня много времени! Я приму свой ответ, как только смогу! – GreySkull

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