我正在使用boost编写一个串行库,并且我有一个enum:
enum parity_t { PARITY_NONE, PARITY_ODD, PARITY_EVEN };我会犯这样的错误:
错误1 C2059:语法错误:'(‘
我不知道是怎么回事。然后我和我的朋友试着:
void PARITY_NONE();我们发现了这些错误:
错误1 C2143:语法错误:缺少')‘之前的’常量‘
错误2错误C2143:语法错误:缺少“;”在“常量”之前
错误3错误C2182:“WORD”:非法使用“void”类型
错误4 C2059:语法错误:')‘
我正在包括boost asio,我想它包含了某个Windows系列api。这种情况只发生在Windows中。作为一项工作,我更改了枚举名称。然而,我在互联网上找不到与这个问题有关的任何东西。有人能帮我们解决这个问题吗?
发布于 2011-03-22 17:30:26
它在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-22 17:31:27
它是用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-22 17:28:52
这里最可能发生的情况是,您的enum中的一个值已经是#define,而不是另一个值。该值的扩展导致enum发出编译器错误。您可以通过将代码更改为以下代码来验证这一点
#ifdef PARITY_NONE
#error Duplicate definition
#endif对enum中的每个值重复
找出定义的来源要复杂得多。如果你幸运的话,下面的方法会起作用
definition
PARITY_NONE in a methodhttps://stackoverflow.com/questions/5395303
复制相似问题