我正在尝试将对象添加到向量中,但是它不起作用。
码:
class GameClass{
public:
void makeNewPlayer(int isItBad){
if (isItBad==0){
goodPlayers.push_back(PlayerClass());
}
}
private:
vector<PlayerClass> badPlayers;
vector<PlayerClass> goodPlayers;
};
class PlayerClass{
public:
PlayerClass(int badStatus){
myLocation[0]=rand()%(N-2)+1;
myLocation[1]=rand()%(N-2)+1;
isBad=badStatus;
}
void setMyLocation(int x, int y){
myLocation[0]=x;
myLocation[1]=y;
}
void getMyLocation(int *targetLoc){
targetLoc[0]=myLocation[0];
targetLoc[1]=myLocation[1];
}
private:
int myLocation[2];
int isBad=1;
};
错误
没有匹配的函数来调用'PlayerClass :: PlayerClass()'|
从这一行:
goodPlayers.push_back(PlayerClass());
编辑:
我如何使其成为默认构造函数?
最佳答案
因为没有默认构造函数,所以出现该错误。您具有自定义构造函数,因此不会自动提供默认构造函数。
因此,您需要为badstatus传递一个值,例如:
goodPlayers.push_back(PlayerClass(4));
您可以通过将badstatus设置为默认参数来设置默认值,例如:
PlayerClass(int badStatus=4){
myLocation[0]=rand()%(N-2)+1;
myLocation[1]=rand()%(N-2)+1;
isBad=badStatus;
}
现在,即使您不提供参数4,也可以正常工作。.为badstatus提供默认值。
建议:始终确保该类具有默认的构造函数。即使您忘记传递参数,您仍然可以从类中实例化该对象。
在您的情况下,您无需设置int isBad = 1;更改为int isBad;并将“ = 1”添加到
PlayerClass(int badStatus=1){
myLocation[0]=rand()%(N-2)+1;
myLocation[1]=rand()%(N-2)+1;
isBad=badStatus;
}