我正在尝试使用委托的构造函数,并尝试遵循this question和this question中的格式,但是,我仍然遇到问题。
我的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
我的player.cpp
文件是这样的:
#include "player.h"
Player::Player(std::string name, int score)
{
score_ = score;
name_ = name;
}
Player::Player(void) : Player(NULL,0)
{
}
然而,当我尝试编译时,我收到以下错误:
1>a:\projects\test\src\player.cpp(5): error C2614: 'Player' : illegal member initialization: 'Player' is not a base or member
我做错了什么?如果相关,我使用的是VS2012。
答案 0 :(得分:14)
如果相关,我使用的是VS2012。
因为Visual Studio 没有实现这个C ++ 11功能。抱歉。有很多C++11 features they don't implement。
答案 1 :(得分:7)
这不是您的问题的答案,但即使您的编译器不支持委托构造函数,我想解决您的代码本来会遭受的一些单独的问题:
使用初始化列表,而不是分配。
构建重物时,按值传递并移动。
您无法从空指针初始化std::string
。如果你想要一个空字符串,则传递一个空字符串。
你应该很少,在非常特殊的情况下,你应该有一个析构函数。
总而言之,我们得到以下代码:
class Player
{
public:
Player(std::string name, int score)
: name_(std::move(name))
, score_(score)
{ }
Player()
: Player("", 0)
{ }
protected:
std::string name_;
int score_;
};