C ++ Delegated Constructor

时间:2012-09-24 20:37:50

标签: c++ c++11

我正在尝试使用委托的构造函数,并尝试遵循this questionthis 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。

2 个答案:

答案 0 :(得分:14)

  

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

因为Visual Studio 没有实现这个C ++ 11功能。抱歉。有很多C++11 features they don't implement

答案 1 :(得分:7)

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

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

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

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

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

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

    class Player
    {
    public:
       Player(std::string name, int score)
       : name_(std::move(name))
       , score_(score)
       { }
    
       Player()
       : Player("", 0)
       { }
    
    protected:
       std::string name_;
       int         score_;
    };