为什么我尝试在struct中的vector内的struct中添加向量会失败?

Gre*_*ull 1 c++ struct vector

我有一段时间有这个问题,我想就此发表意见.如果您有更好的方法,请告诉我.一切都很好,除非我尝试访问它永远不会执行的实体内的项目的向量.总是说它是空的.

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 5

问题在于:

void cTemp::addItemToEnt(char* entityName, sObj itemDetails){
    for(auto m : entityList){
Run Code Online (Sandbox Code Playgroud)

你的循环正在处理从中复制的值entryList,而不是对它们的引用.你要:

for(auto& m : entityList){
Run Code Online (Sandbox Code Playgroud)