C++ 为什么我尝试在结构中的向量中添加到结构中的向量时失败了?

C++ 为什么我尝试在结构中的向量中添加到结构中的向量时失败了?,c++,vector,struct,C++,Vector,Struct,我有一段时间有这个问题,我想听听你的意见。如果你有更好的方法,请告诉我。 除了我尝试访问实体中的项的向量时,一切都很好,它从未执行过。总是说它是空的 struct sObj{ char itemName[64]; int itemStrenght; }; struct sEnt{ char entityName[64]; vector<sObj> entityItems; }; class cTemp{ public: void addE

我有一段时间有这个问题,我想听听你的意见。如果你有更好的方法,请告诉我。 除了我尝试访问实体中的项的向量时,一切都很好,它从未执行过。总是说它是空的

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
        }
    }
}
struct-sObj{
char itemName[64];
综合实力;
};
结构发送{
字符实体名[64];
向量实体项;
};
类cTemp{
公众:
void addEntity(已发送实体){entityList.push_back(已发送);}
void addItemToEnt(字符*entityName,sObj itemDetails);
void setAllItemStrength(char*itemName,int newStr);
私人:
向量实体列表;
};
void cTemp::addItemToEnt(char*entityName,sObj itemDetails){
用于(自动m:entityList){
if(!\u stricmp(m.entityName,entityName)){
m、 entityItems.推回(itemDetails);
m、 entityItems.push_back(itemDetails);//仅用于测试
msgBox(“项目计数:%i”,m.entityItems.size());//正在工作
}
}
}
void cTemp::setAllItemStrength(char*itemName,int newStr){
用于(自动m:entityList){
msgBox(“项目计数:%i”,m.entityItems.size());//返回0
用于(自动n:m.entityItems){
//永远不会被处决
}
}
}
问题在于:

void cTemp::addItemToEnt(char* entityName, sObj itemDetails){
    for(auto m : entityList){
您的循环正在处理从
entryList
复制的值,而不是对它们的引用。你想要:

for(auto& m : entityList){
问题在于:

void cTemp::addItemToEnt(char* entityName, sObj itemDetails){
    for(auto m : entityList){
您的循环正在处理从
entryList
复制的值,而不是对它们的引用。你想要:

for(auto& m : entityList){

在哪里调用添加项?如果向量为空,可能是因为你从未填充过它。顺便说一下,你应该使用
std::string
我会相应地调用所有内容。上面的代码只是我问题的一个例子。不是真正的代码,因为我想把它写得简短一些。弗兰克已经回答了确切的问题。可能还有@GuillaumeRacicot。但是到目前为止,我写所有东西的方式都是使用char。现在它确实起作用了。我会采纳你的建议,并将其整合。谢谢。你在哪里打电话给
additemtont
?如果向量为空,可能是因为你从未填充过它。顺便说一下,你应该使用
std::string
我会相应地调用所有内容。上面的代码只是我问题的一个例子。不是真正的代码,因为我想把它写得简短一些。弗兰克已经回答了确切的问题。可能还有@GuillaumeRacicot。但是到目前为止,我写所有东西的方式都是使用char。现在它确实起作用了。我会采纳你的建议,并将其整合。谢谢,非常感谢。我完全忽略了这一点。你帮我节省了很多时间!我会尽快接受你的回答!非常感谢你。我完全忽略了这一点。你帮我节省了很多时间!我会尽快接受你的回答!