2017-01-02 66 views
1

我有這個問題一段時間,我想對此發表意見。如果你有更好的方法,請告訴我。 一切運作良好,除非我嘗試訪問它永遠不會執行的實體內的項目的向量。總是說它是空的。爲什麼我嘗試在struct中的向量內向向量中添加向量會失敗?

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

我會相應地調用所有東西。上面的代碼只是我的問題的一個例子。不是實際的代碼,因爲我想簡化這篇文章。確切的問題已經由Frank解答。可能是@GuillaumeRacicot。但是直到現在我寫了所有東西的方式都使用char。現在它確實有效。我會接受你的建議並整合它。謝謝。 – GreySkull

回答

5

問題就在這裏:

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

你的循環正在從entryList,而不是它們的引用複製值。你想:

for(auto& m : entityList){ 
+0

非常感謝。我完全忽略了這一點。你爲我節省了很多時間!我會盡快接受你的回答! – GreySkull