我正在尝试在具有id
属性的2个类之间实现某种关系。 teamId
课程中的SoccerTeams
必须与directorId
课程中导演的managing_directors
相同,以便将总经理分配给足球队。
两个类分别有一个向量teams
和man_dirs
。
class SoccerTeams {
string teamName;
int teamId;
friend class managing_directors;
public:
//teams vector
vector<SoccerTeams> teams;
void addTeam(string name, int id) {
SoccerTeams newTeam(name, id);
teams.push_back(newTeam);
};
SoccerTeams(){};
SoccerTeams(string teamName, int id){
teamName = teamName;
teamId = id;
};
~SoccerTeams(){};
};
//managing directors of a soccer team
class managing_directors : public SoccerTeams, public people {
int directorId;
public:
//man_dirs vector
vector<managing_directors> man_dirs;
managing_directors(int num_of_managers, int avg_age);
managing_directors(){};
~managing_directors(){};
void addDirector(string name, char sex, int age, int id) {
managing_directors newDirector;
newDirector.name = name;
newDirector.sex = sex;
newDirector.age = age;
newDirector.directorId = id;
man_dirs.push_back(newDirector);
};
我尝试在manage_directors类中创建一个检查团队ID的函数,如下所示。
int idChecker(int id) {
for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
if(i -> teamId == id)
return 1;
}
return 0;
}
但是函数总是返回0,我相信这是因为它没有检查在main函数中创建的团队向量的相同实例,因为当我尝试在teams
类中打印这个managing_directors
向量时,它是空的。是否有可能使teams
向量全局?
这是解决这个问题的正确方法吗?
managing_directors
中继承的人类的定义(以防万一)
class people {
string name;
char sex;
int age;
bool under_auth;
int auth_level;
friend class managing_directors;
public:
people(){};
~people(){};
virtual int get_age(){ return this->age; };
};
更新:
我修复了其中一个答案中给出的循环,但我不认为这是问题,因为函数仍然返回0.我尝试使用cout尝试打印所有的ID,我什么都没有输出,它是空的。
我做了类似的事
int idChecker(int id) {
for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
cout << i - > teamId << endl; //test code
if(i -> teamId == id)
return 1;
}
return 0;
}
答案 0 :(得分:4)
你的循环错了。在
brew unlink vim
如果第一个for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
if(i -> teamId == id)
return 1;
return 0;
}
不匹配,那么你立即返回0.你需要做的是将i
移出for循环,这样你只有在循环找不到时才返回0比赛。这给了你
return 0;
您还可以使用基于范围的循环来简化此操作,如
int idChecker(int id) {
for (vector<SoccerTeams>::const_iterator i = teams.begin(); i != teams.end(); ++i) {
if(i -> teamId == id)
return 1;
}
return 0;
}
你也可以使用std::any_of
和lambda之类的
int idChecker(int id) {
for (const auto& e : teams)
if(e.teamId == id)
return 1;
return 0;
}