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

In constructor 'Player::Player(std::string, int, Board*)':

本文关键字:int Board string Player 构造函数 layer std      更新时间:2023-10-16
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--;
    }
}

还是同样的错误;/

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

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

Unit figure(figure,i);

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

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

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

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

Unit figure(figure,i);