2

我有一个名为 player 的向量和一个名为 Player 的类。我想做的是写:

players.push_back(Player(name, Weapon(bullets)));

所以我希望能够循环创建玩家。但是我看到一条错误消息说“没有调用 Player::Player 的匹配函数...”

然后我将其更改为:

Weapon w(bullets);
Player p(name, w);
players.push_back(p);

这是我的播放器定义:

class Player {
public:
   Player(string &name, Weapon &weapon);
private
   string name;
   Weapon weapon;
}

我只是想了解这些定义之间的区别。这是将对象传递给对象构造函数的正确方法吗?

注意:这些不是我的实际类定义。我只是想通过编码学习一些关于 C++ 中面向对象编程的知识。我的意思是我知道武器可以在 Player 中初始化 :)

4

2 回答 2

4

将构造函数更改为:

Player(const string &name, const Weapon &weapon);

或者:

Player(const string &name, Weapon weapon);

使用临时对象初始化引用是无效的 C++,这是您在使用时所做的:

Player(name, Weapon(bullets));

但是使用const参考是合法的。

编辑:您还应该将名称作为const参考或按值传递。

于 2010-04-03T12:30:00.690 回答
1

您正在将一个临时 ( Weapon(bullets)) 传递给Player构造函数,该构造函数需要一个Weapon &. 但是由于不允许您引用临时文件,因此失败了。

但是,您可以对临时对象进行const引用。因此,重新声明您的构造函数,如下所示:

   Player(string const &name, Weapon const &weapon);
于 2010-04-03T12:33:18.313 回答