C++委托构造函数

C++ Delegated Constructor

本文关键字:构造函数 C++      更新时间:2023-10-16

>我正在尝试使用委托的构造函数,并尝试遵循此问题和此问题中的格式,但是,我仍然遇到问题。

我的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:projectstestsrcplayer.cpp(5): error C2614: 'Player' : illegal member initialization: 'Player' is not a base or member

我做错了什么?如果相关,我正在使用VS2012。

如果相关,我正在使用VS2012。

这是因为Visual Studio没有实现这个C++11功能。不好意思。他们没有实现很多 C++11 功能。

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

  1. 使用初始值设定项列表,而不是赋值。

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

  3. 不能从空指针初始化std::string。如果需要空字符串,请传递空字符串。

  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_;
};