将对象添加到类中

时间:2014-08-20 18:06:19

标签: c++ class

我试图将一个对象添加到矢量中,但它无效。

代码:

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

错误

  

没有匹配函数来调用&#39; PlayerClass :: PlayerClass()&#39; |

从这一行:

     goodPlayers.push_back(PlayerClass());

编辑: 我怎样才能使它成为默认构造函数???

1 个答案:

答案 0 :(得分:3)

您收到该错误,因为您没有默认构造函数。您有自定义构造函数,因此不会自动提供默认构造函数。

所以你需要为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;并添加&#34; = 1&#34;到

PlayerClass(int badStatus=1){
        myLocation[0]=rand()%(N-2)+1;
        myLocation[1]=rand()%(N-2)+1;
        isBad=badStatus;
    }