C++ Delegated Constructor

2 c++ c++11

我试图使用委托的构造函数,并试图遵循这个问题这个问题中找到的格式,但是,我仍然有问题.

我的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.

Nic*_*las 14

如果相关,我使用的是VS2012.

这是因为Visual Studio 没有实现这个C++ 11功能.抱歉.他们没有实现很多C++ 11功能.


Ker*_* SB 7

这不是您的问题的答案,但即使您的编译器不支持委托构造函数,我想解决您的代码本来会遇到的一些单独的问题:

  1. 使用初始化列表,而不是分配.

  2. 构造重物时,按值传递并移动.

  3. 您无法std::string从空指针初始化a .如果您想要一个空字符串,请传递一个空字符串.

  4. 你应该很少,并且在非常特殊的情况下有一个析构函数.

总而言之,我们得到以下代码:

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)