我正在尝试将对象添加到向量中,但是它不起作用。

码:

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;
    }

10-07 15:35