Eclipse CDT无法解析具有特定名称

时间:2018-02-08 18:17:55

标签: c eclipse enums

每当我尝试使用一些特定名称中的一个作为枚举中的值时,由于某些原因,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不显示这些虚假错误消息?

0 个答案:

没有答案