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的情况。他(和其他人)可以随心所欲地调用它,但我更喜欢这样称呼它:一个错误输入的函数声明。