我试图使用委托的构造函数,并试图遵循这个问题和这个问题中找到的格式,但是,我仍然有问题.
我的player.h文件是这样的:
#ifndef PLAYER_H_
#define PLAYER_H_
#include <string>
class Player
{
public:
Player(void);
Player(std::string name, int score);
~Player();
protected:
std::string name_;
int score_;
};
#endif
Run Code Online (Sandbox Code Playgroud)
我的player.cpp文件是这样的:
#include "player.h"
Player::Player(std::string name, int score)
{
score_ = score;
name_ = name;
}
Player::Player(void) : Player(NULL,0)
{
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译时,我收到以下错误:
1>a:\projects\test\src\player.cpp(5): error C2614: 'Player' : illegal member initialization: 'Player' is not a base or member
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如果相关,我使用的是VS2012.
这不是您的问题的答案,但即使您的编译器不支持委托构造函数,我想解决您的代码本来会遇到的一些单独的问题:
使用初始化列表,而不是分配.
构造重物时,按值传递并移动.
您无法std::string从空指针初始化a .如果您想要一个空字符串,请传递一个空字符串.
你应该很少,并且在非常特殊的情况下有一个析构函数.
总而言之,我们得到以下代码:
class Player
{
public:
Player(std::string name, int score)
: name_(std::move(name))
, score_(score)
{ }
Player()
: Player("", 0)
{ }
protected:
std::string name_;
int score_;
};
Run Code Online (Sandbox Code Playgroud)