Переопределение BOOL после включения minwindef.h - PullRequest
0 голосов
/ 09 января 2019

Я новичок в C / C ++, на всякий случай :) Я клонировал старое решение стека протоколов, написанное на C, с одним основным классом на C ++, импортировав его в VS ( Visual C ++ 2017 v 15.9.5 для Windows SDK 10.0.17134.0 ) он скомпилирован правильно и работает.

Теперь решение C ++ (консольное приложение Windows) создало папку lib, скопировало все эти файлы .h и .c в lib, добавило путь к additional include directories, а также в компоновщик additional library directories.

Построение решения, выбрасывающего тонны ошибок. сейчас я пытаюсь исправить это:

Один из заголовочных файлов содержит определения типов

typedef uint8_t U8;
#ifndef BOOL
typedef U8 BOOL;
#endif

но это противоречит minwindef.h из комплекта Windows. хотя я #include types.h получаю C2371 'BOOL': redefinition; different basic types В целом, я хочу использовать это определение BOOL и все остальные, определенные в этом заголовке.

Как мне решить проблему? Или вообще, в случае использования кодов C в проектах C ++, какие настройки и MACRO (например, extern "C" в методах) следует соблюдать

1 Ответ

0 голосов
/ 09 января 2019

Я ничего не знаю о библиотеке, с которой вы пытаетесь работать, потому что вы не сказали нам, что это такое. Но я могу сделать некоторые предположения:

  1. Код вообще не использовался для взаимодействия с кодом Windows;
  2. Создавая приложение Windows C ++, вы добавили зависимости Windows;
  3. Зависимости Windows (известные как отравление пространства имен короткими именами, такими как BOOL) конфликтуют с кодом библиотеки (который делает то же самое со своим макросом BOOL, когда он определен, и с BOOL в противном случае введите псевдоним).

Это на самом деле не имеет ничего общего с C против C ++ или чем-то подобным, и вы не можете сделать никакого общего исправления. Вы можете либо попытаться избавиться от зависимости Windows (нужен ли этот заголовок для вашей задачи?), Либо вы можете исправить вашу библиотеку, чтобы она не касалась BOOL (убедившись, что Windows BOOL - это то, что вам нужно, чтобы она была ).

И используйте это как хороший урок, чтобы не загрязнять пространства имен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...