从头文件访问枚举时出错
Errors when accessing enums from a header file
我试图从c++中的头文件访问枚举,但遇到了错误,我想我可能只是以错误的方式处理了这个问题。
当我编译程序时,我会收到错误,说我的枚举没有在这个范围内声明。
例如"错误:BASIC未在此范围内声明"错误:未在此范围中声明'PIPE'"
tokenizer.h
typedef struct {
char *start;
enum { BASIC, SINGLE_QUOTE, DOUBLE_QUOTE, PIPE, SEMICOLON, EOL, ERROR } type;
} aToken;
simpleshell.cpp
void processLine(char *line)
{
enum { CMD, PIPED_CMD, ARGS } processMode;
processMode = CMD;
Statement *stmt = newStatement(); // Store the current statement
Command *cmd = NULL;
int doneFlag = 0;
char *expandedToken = NULL;
startToken(line);
aToken answer;
answer = getNextToken();
while (!doneFlag)
{
switch (answer.type)
{
case ERROR:
... // some code
return;
... // other case statements
case PIPE:
... // some code
break;
case EOL:
doneFlag = 1;
default:
fprintf(stderr, "Programming Error: Unrecognized type returned!!!n");
if (cmd != NULL )
{
freeCommand(cmd);
cmd = NULL;
}
if (stmt != NULL)
{
freeStatement(stmt);
stmt = NULL;
}
return;
}
answer = getNextToken();
}
}
您应该将其写成aToken::BASIC
、aToken::PIPE
等。枚举包含在aToken
的作用域中。
例如"错误:未在此范围中声明BASIC"错误:在此范围中未声明PIPE"
您忘记应用结构作用域(aToken)。您需要使用这样的枚举:
aToken::myEnumValue
所以,你应该这样写你的代码:
switch (answer.type)
{
case aToken::ERROR:
// ^^^^^^^^
... // some code
return;
... // other case statements
case aToken::PIPE:
// ^^^^^^^^
... // some code
break;
case aToken::EOL:
// ^^^^^^^^
doneFlag = 1;
default:
fprintf(stderr, "Programming Error: Unrecognized type returned!!!n");
if (cmd != NULL )
{
freeCommand(cmd);
cmd = NULL;
}
if (stmt != NULL)
{
freeStatement(stmt);
stmt = NULL;
}
return;
}
话虽如此,如果您支持C++11,那么您应该考虑枚举类。在这种情况下,您还需要添加枚举类作用域,如下所示:
aToken::MyEnumClass::myEnumValue
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- C++ 在C++中通过引用将枚举作为默认参数传递时出错
- C++:访问抽象超类枚举时出错
- 构造构造函数采用单个枚举参数的临时对象时出错
- 在GCC中专门化静态类变量时出错:枚举示例
- C ++如何在不同的枚举名称中使用相同的枚举成员名称而不会出错:重新定义;以前的定义是'enumerator'
- 从头文件访问枚举时出错