0

我正在使用 boost 编写一个串行库,并且我有一个枚举:

enum parity_t { PARITY_NONE, PARITY_ODD, PARITY_EVEN };

我收到如下错误:

错误 1 ​​错误 C2059:语法错误:'('

我无法弄清楚问题是什么。然后我和我的朋友尝试了:

void PARITY_NONE();

我们得到了这些错误:

错误 1 ​​错误 C2143:语法错误:在 'constant' 之前缺少 ')'

错误 2 错误 C2143:语法错误:缺少 ';' 在“常数”之前

错误 3 错误 C2182: 'WORD' : 非法使用类型 'void'

错误 4 错误 C2059:语法错误:')'

我包括 boost asio,我认为它在某处包括 Windows 串行 api。这只发生在 Windows 中。作为一种解决方法,我更改了我的枚举名称。但是,我无法在互联网上找到与此问题相关的任何内容。有人可以帮我们解决这个问题吗?

4

4 回答 4

5

它在 winbase.h 中定义:

//
// Settable Stop and Parity bits.
//

#define STOPBITS_10       ((WORD)0x0001)
#define STOPBITS_15       ((WORD)0x0002)
#define STOPBITS_20       ((WORD)0x0004)
#define PARITY_NONE       ((WORD)0x0100)
#define PARITY_ODD        ((WORD)0x0200)
#define PARITY_EVEN       ((WORD)0x0400)
#define PARITY_MARK       ((WORD)0x0800)
#define PARITY_SPACE      ((WORD)0x1000)

#undef在创建您的枚举之前。

于 2011-03-22T17:30:26.767 回答
2

它定义在WinBase.h

//
// Settable Stop and Parity bits.
//

#define STOPBITS_10       ((WORD)0x0001)
#define STOPBITS_15       ((WORD)0x0002)
#define STOPBITS_20       ((WORD)0x0004)
#define PARITY_NONE       ((WORD)0x0100)
#define PARITY_ODD        ((WORD)0x0200)
#define PARITY_EVEN       ((WORD)0x0400)
#define PARITY_MARK       ((WORD)0x0800)
#define PARITY_SPACE      ((WORD)0x1000)

不妨使用它们的值,因为如果您不使用该枚举来索引数组等,它们的工作方式与您的枚举相同。

于 2011-03-22T17:31:27.733 回答
1

这里最有可能发生的是您的值之一enum已经#define是不同的值。该值的扩展导致enum发出编译器错误。您可以通过将代码更改为以下内容来验证这一点

#ifdef PARITY_NONE
#error Duplicate definition
#endif

对中的每个值重复enum

发现定义的来源有点棘手。如果你很幸运,以下将起作用

  • 注释掉你的枚举定义
  • 输入PARITY_NONE一个方法
  • 右键单击并选择“转到定义”
于 2011-03-22T17:28:52.287 回答
0

如果您 CTRL + 左键单击 Visual Studio 中的属性,您将看到它。

如果您在 Visual Studio 中 CTRL + 左键单击您的属性,您将看到这个

于 2021-05-28T13:37:00.263 回答