每当我尝试使用一些特定名称中的一个作为枚举中的值时,由于某些原因,eclipse无法解析这些名称,尽管代码仍在编译并正确运行:
// MVCE.h
typedef enum things
{
TIMED_OUT,
NOT_A_COMMAND_STATUS,
WHATEVER
}
Thing_t;
--------------------------------------------------
// MVCE.c
#include "MVCE.h"
Thing_t GetTimedOut( void )
{
return TIMED_OUT;
}
Thing_t GetWhatever( void )
{
return WHATEVER;
}
Thing_t GetNotCmd( void )
{
return NOT_A_COMMAND_STATUS; // Symbol 'NOT_A_COMMAND_STATUS' could not be resolved
}
enum things GetNotCmdEnum( void )
{
return NOT_A_COMMAND_STATUS; // Symbol 'NOT_A_COMMAND_STATUS' could not be resolved
}
当我将枚举常量从一个枚举移动到另一个枚举时,这个问题首次开始发生,如下所示:
typedef enum
{
BUTTON_PRESS,
- BUTTON_RELEASE,
+ BUTTON_RELEASE
- TIMED_OUT
}
Event_t;
typedef enum
{
NOT_A_COMMAND_STATUS,
SYNTAX_ERROR,
- BUFFER_FULL
+ BUFFER_FULL,
+ TIMED_OUT
}
Result_t;
之后,在我移动Result_t
之前TIMED_OUT
中所有枚举常量开始出现此问题(即,只要我引用NOT_A_COMMAND_STATUS
,{{1}就会发生这种情况},SYNTAX_ERROR
)。
尽管原始源代码文件的 none 甚至仍然存在 - 即使在删除项目中的每个文件之后,这仍然发生在我创建的任何新文件中。
另一个注意事项是,在声明枚举的同一文件中引用没有错误:
BUFFER_FULL
我已经尝试在头文件中添加include guards和typedef enum things
{
TIMED_OUT,
NOT_A_COMMAND_STATUS,
WHATEVER
}
Thing_t;
Thing_t GetNotCmd( void )
{
return NOT_A_COMMAND_STATUS; // No error from eclipse.
}
包装器,但这些都没有任何区别。
请注意代码仍然可以编译并正确运行,因此这是Eclipse的一个问题,而不是代码本身的问题。
这是在Eclipse IDE for C / C ++ Developers,版本Oxygen.1a Release(4.7.1a),build id 20171005-1200。
如何修复此问题,以便Eclipse不显示这些虚假错误消息?