C++;尝试读取枚举状态时出现枚举错误 我正在用C++做游戏,我有一个EnnS的问题。我正在定义枚举: enum class CharacterClass { warrior = 0, scout = 1, mage = 2 };

C++;尝试读取枚举状态时出现枚举错误 我正在用C++做游戏,我有一个EnnS的问题。我正在定义枚举: enum class CharacterClass { warrior = 0, scout = 1, mage = 2 };,c++,class,enums,C++,Class,Enums,我在玩家课上使用它: class Player { public: Player(); ~Player(); CharacterClass PlayerClass; private: }; 当我尝试设置枚举的状态时: Player player(); player.PlayerClass = CharacterClass::mage; 编译器发现此错误: request for member 'PlayerClass' in

我在玩家课上使用它:

class Player
{
    public:
        Player();
        ~Player();

        CharacterClass PlayerClass;

    private:
};
当我尝试设置枚举的状态时:

Player player();
player.PlayerClass = CharacterClass::mage;
编译器发现此错误:

request for member 'PlayerClass' in 'player', which is of non-class type 'Player()'
这是最重要的:
player
被理解为函数声明。因此player.PlayerClass会触发此错误

尝试:

Player player{};  // prefer uniform brace-initialisation 
这篇关于的博客文章很好地解释了每种形式的优缺点

这是最重要的:
player
被理解为一个函数声明。因此player.PlayerClass会触发此错误

尝试:

Player player{};  // prefer uniform brace-initialisation 

这篇关于的博客文章很好地解释了每种形式的优缺点

Player()不创建类型为Player的变量!相反,它声明了一个函数。

Player()不会创建类型为Player的变量!相反,它声明一个函数。

如何创建
player
实例<代码>播放器()?我感觉到最烦人的是,我们到了,
Player()声明一个函数。你应该写
Player指令正在工作,谢谢!如何创建
player
实例<代码>播放器()?我感觉到最烦人的是,我们到了,
Player()声明一个函数。你应该写
Player指令正在工作,谢谢!这不是一个非常令人烦恼的解析。A声明一个函数,该函数返回一个对象,并接受一个未命名的函数类型参数而不仅仅是
玩家。。?我想知道两者之间的区别并且它正在工作,我认为这甚至比
Player{}更好
@WhozCraig大多数说明MVp的示例确实如您所说。然而,这也是一个模棱两可的问题。斯科特·梅耶斯(Scott Meyers)自己发明了这个术语,他将这种精确的情况称为MVP(在《高效现代C++》第51页底部)@Christophe也许是这样,我并不拥有这本书。但是正式标准没有提到我可以找到的8.2[dcl.ambig.res]中的简单函数decl,它特别提到了我引用的案例和wiki提到的案例。6.8[stmt.ambig]也不包括OP的情况。他(和其他人)可以随心所欲地调用它,但我更喜欢这样称呼它:一个输入错误的函数声明。这不是一个非常麻烦的解析。A声明一个函数,该函数返回一个对象并接受一个未命名的函数类型参数而不仅仅是
玩家。。?我想知道两者的区别,我键入了
播放器并且它正在工作,我认为这甚至比
Player{}更好
@WhozCraig大多数说明MVp的示例确实如您所说。然而,这也是一个模棱两可的问题。斯科特·梅耶斯(Scott Meyers)自己发明了这个术语,他将这种精确的情况称为MVP(在《高效现代C++》第51页底部)@Christophe也许是这样,我并不拥有这本书。但是正式标准没有提到我可以找到的8.2[dcl.ambig.res]中的简单函数decl,它特别提到了我引用的案例和wiki提到的案例。6.8[stmt.ambig]也不包括OP的情况。他(和其他人)可以随心所欲地调用它,但我更喜欢这样称呼它:一个错误输入的函数声明。