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

还是一样的错误;/

4

2 回答 2

3

Unit 没有复制构造函数(因此您不能按值传递它)。

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

Unit figure(figure,i);

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

于 2013-10-22T22:08:57.177 回答
3

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

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

您也不能在该行中声明和引用变量:

Unit figure(figure,i);
于 2013-10-22T22:10:20.007 回答