【发布时间】:2017-01-02 21:25:25
【问题描述】:
我有这个问题有一段时间了,我想对此发表意见。如果您有更好的方法,请告诉我。 一切正常,除非我尝试访问它从不执行的实体中的项目的向量。总是说它是空的。
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
}
}
}
【问题讨论】:
-
在哪里打电话
addItemToEnt?如果向量是空的,可能是因为你从不填充它。 -
顺便说一下,你应该使用
std::string -
我确实会相应地调用所有内容。上面发布的代码只是我的问题的一个例子。不是实际的代码,因为我想把它写成简短的帖子。弗兰克已经回答了确切的问题。还有@GuillaumeRacicot,可能。但是到目前为止,我编写所有内容的方式都是使用 char。它现在确实有效。我会接受你的建议并整合它。谢谢。