我有一个名为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 ++中面向对象编程的一些东西。我的意思是我知道可以在播放器中初始化武器:)
答案 0 :(得分:4)
将构造函数更改为:
Player(const string &name, const Weapon &weapon);
或:
Player(const string &name, Weapon weapon);
使用临时对象初始化引用是无效的C ++,这是您在使用时所做的事情:
Player(name, Weapon(bullets));
尽管使用const
引用是合法的。
编辑:您还应将名称作为const
引用或按值传递。
答案 1 :(得分:1)
您正在将临时(Weapon(bullets)
)传递给Player
构造函数,该构造函数需要Weapon &
。但由于你不允许引用临时文件,因此失败了。
但是,您可以对临时内容进行 const 引用。因此,重新声明您的构造函数如下:
Player(string const &name, Weapon const &weapon);