Конфликт в определении типа данных

619
07 февраля 2017, 20:50

Есть два h-файла, в которых определен тип данных:

  • в первом случае (wintypes.h) как typedef unsigned long DWORD;
  • во втором (stdafx.h) как typedef uint32_t DWORD, LPDWORD;

Первый тип данных (файл wintypes.h) нужен для функций в компилируемом файле xxx.cpp. В этот же xxx.cpp подключается Crypto.h, имеющий #include "stdafx.h", и подключается winscard.h, имеющий #include "wintypes.h". При компиляции под Ubuntu возникает ошибка:

In file included from Crypto.h:27:0,
                 from xxx.cpp:12:
stdafx.h:29:26: error: conflicting declaration ‘typedef uint32_t* LPDWORD’
 typedef uint32_t DWORD, *LPDWORD;  
                          ^
In file included from winscard.h:21:0,
                 from xxx.cpp:11:
wintypes.h:78:17: note: previous declaration as ‘typedef DWORD* LPDWORD’
  typedef DWORD *LPDWORD;

Не судите строго, я еще только учусь, могу многое не знать. Объясните, пожалуйста, как это можно исправить.

Answer 1

Если DWORD соответствует uint32_t, то проблем быть не должно. Но раз уж они есть, получается, что это не так. Чтобы ругани компилятора на конфликтующие объявления не было нужно убрать этот конфликт. Например, добавить в одном из файлов директиву условной компиляции:

#ifdef WIN32
    typedef DWORD* LPDWORD;
#else
    typedef uint32_t* LPDWORD;
#endif

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

READ ALSO
Перечисление полей структуры

Перечисление полей структуры

Есть структура и функции:

531
Разный статус заказа в один момент времени для разных пользователей

Разный статус заказа в один момент времени для разных пользователей

Коллеги, задумался над такой проблемой: как сделать разный статус заказа в один момент времени для разных пользователей?

515
Среднее значение из таблицы sql

Среднее значение из таблицы sql

Есть задача сформировать базу для личных целейИсходные данные более 2000 заданий 5 работников 2 вида оценок:

617
MySQL изменение даты в формате `text`

MySQL изменение даты в формате `text`

Есть поле формата text содержащее дату, пример даты: 0205

562