Joc*_*ckX 2 c++ visual-studio-2010
我正在使用visual studio 2010,并且不能完全搞定,这个类怎么错(语法错误:标识符'EnumType')并且不会编译:
class BrokenClassWithEnum
{
private:
void useEnum (EnumType enumType); //syntax error : identifier 'EnumType '
public:
enum EnumType
{
VAL1,
VAL2,
VAL3
};
}
Run Code Online (Sandbox Code Playgroud)
这没关系:
class WorkingClassWithEnum
{
public:
enum EnumType
{
VAL1,
VAL2,
VAL3
};
private:
void useEnum (EnumType enumType);
}
Run Code Online (Sandbox Code Playgroud)
班级范围发生了什么变化?
我不认为定义(非声明)的顺序很重要,但前向声明将解决此错误 - 至少在MSVC++ 6中.在MSVC++ 6之外,您应该指定一个存储类型来转发声明一个枚举(指定的要求)前向枚举中的存储类型是在C++ 0x标准中)
注意:VC++ 6将允许省略存储类型,但如果您正在声明枚举,则应声明存储类型(见下文):
class BrokenClassWithEnum {
public:
enum EnumType;
private:
void useEnum (EnumType enumType);
public:
enum EnumType {
VAL1,
VAL2,
VAL3
};
};
Run Code Online (Sandbox Code Playgroud)
class BrokenClassWithEnum {
public:
enum EnumType : int;
private:
void useEnum (EnumType enumType);
public:
enum EnumType : int {
VAL1,
VAL2,
VAL3
};
};
Run Code Online (Sandbox Code Playgroud)
注意:在某些但不是所有C++版本中都可以转发枚举声明: