在构造函数'Player :: Player(std :: string,int,Board *)'中:

时间:2013-10-22 21:54:02

标签: c++ constructor

Player::Player(string Playername, int nr ,Board* x)
{
    imie= Playername;
    number=nr;
    int k;

    if(nr==1)
        k=0;
    else k=24;

    for(int i=0;i<UNITS_NUMBER;i++)
    {   Unit figure(figure,i);
        units[i]=figure;

        units[i].move(x->getF(k));
        if(nr==1)
            k++;
        else k--;
    }
}

(它只是Player类的构造函数) 和错误:

在构造函数Player::Player(std::string, int, Board*)中:

没有用于调用Unit::Unit()

的匹配函数

Player::Player(string Playername, int nr ,Board* x)

以下是Unit

的定义
class Unit
{  
    Field* place;
    Unit* unit;
    int name;


public:
    Unit(Unit iam, int n);
    void move(Field* x);
    int getname(){return name;}
};

以下是Player

的定义
const int UNITS_NUMBER = 5;
class Player
{
    Unit units[UNITS_NUMBER];
    string imie;
    int number;

public:
    Player(string Playername, int nr, Board *x);
    string getName();
    void decide(Board*);
    ~Player();
};

如果你需要更多,请告诉我。

更改后:

class Unit
{  Field* place;
    Unit* unit;
    int name;


public:
    Unit(int n);
    void move(Field* x);
    int getname();
};

Player

Player::Player(string Playername, int nr ,Board* x)
{
    imie= Playername;
    number=nr;
    int k;
    if(nr==1)
        k=0;
    else k=24;

    for(int i=0;i<UNITS_NUMBER;i++)
    {   Unit figure(i);
        units[i]=figure;

        units[i].move(x->getF(k));
        if(nr==1)
            k++;
        else k--;
    }
}

仍然是同样的错误; /

2 个答案:

答案 0 :(得分:3)

单位没有复制构造函数(因此您无法通过值传递它)。

此外,这是未定义的行为:

Unit figure(figure,i);

因为figure的值在初始化之前使用。

答案 1 :(得分:3)

您遇到的问题是Unit构造函数,其中包含Unit副本。但是,Unit没有复制构造函数或默认构造函数,因此无法构造它。

目前尚不清楚为什么要在Unit类中引用Unit对象,因此很难提出解决方案。

您也无法声明并引用该行中的变量:

Unit figure(figure,i);