PARITY_NONE ключевое слово в C ++ Windows? - PullRequest
0 голосов
/ 22 марта 2011

Я пишу последовательную библиотеку, используя boost, и у меня есть enum:

enum parity_t { PARITY_NONE, PARITY_ODD, PARITY_EVEN };

Я получаю сообщения об ошибках типа:

Ошибка 1, ошибка C2059: синтаксическая ошибка: '('

Я не мог понять, в чем проблема. Тогда мы с другом попробовали:

void PARITY_NONE();

И мы получили эти ошибки:

Ошибка 1, ошибка C2143: синтаксическая ошибка: отсутствует «)» перед «константой»

Ошибка 2, ошибка C2143: синтаксическая ошибка: отсутствует ';' до «константы»

Ошибка 3, ошибка C2182: «СЛОВО»: недопустимое использование типа «void»

Ошибка 4: ошибка C2059: синтаксическая ошибка: ')'

Я включаю boost asio, который, я думаю, включает где-то серийный API Windows. Это происходит только в Windows. Как обходной путь, я изменил свои имена перечисления. Однако я не могу найти что-либо связанное с этой проблемой в Интернете. Может ли кто-нибудь помочь нам понять это?

Ответы [ 3 ]

5 голосов
/ 22 марта 2011

Это определено в 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 их перед созданием перечисления.

2 голосов
/ 22 марта 2011

Это определено в 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)

Можно также использовать их значения, так как они будут работать так же, как ваше перечисление, если вы не используете это перечисление для индексации массива или лайков.

1 голос
/ 22 марта 2011

Скорее всего, здесь происходит то, что одно из значений в вашем enum уже #define имеет другое значение. Расширение этого значения приводит к тому, что enum выдает ошибку компилятора. Вы можете убедиться в этом, изменив код на

#ifdef PARITY_NONE
#error Duplicate definition
#endif

Повторите для каждого значения в enum

Узнать, откуда исходит определение, немного сложнее. Если вам повезет, сработает следующее

  • Закомментируйте определение enum
  • Введите PARITY_NONE в методе
  • Щелкните правой кнопкой мыши и выберите «Перейти к определению»
...