2013-06-27 1 views
1

Я пытаюсь создать сторонний проект с открытым исходным кодом с использованием MinGW. Одна из зависимостей - wxWidgets. Когда я пытаюсь сделать проект из MSYS я получаю ошибку компиляции изMinGW винт с COLORREF и RGB

/MinGW/msys/1.0/local/include/wx-2.8/wx/msw/private.h

In function 'COLORREF wxColourToRGB(const wxColour&)': 
error: cannot convert 'RGB' to 'COLORREF {aka long unsigned int}' in return 

Это несколько странно, учитывая, что, according to Microsoft в RGB макрос возвращает COLORREF.

В самом деле, глядя в H: \ MinGW \ включают в себя я нахожу wingdi.h со следующим кодом

#define RGB(r,g,b) ((COLORREF)((BYTE)(r)|((BYTE)(g) << 8)|((BYTE)(b) << 16))) 

Какая вещь будет вызывать эту ошибку? Есть ли способ проверить, включены ли COLORREF и RGB из wingdi.h, а не в другое место? Это даже стоит проверить?

Технические характеристики

  • GCC версии 4.7.2
  • WxWidgets версия 2.8.12

(Я новичок в C++ и MinGW специально, но в целом компьютер и программирование грамотными)

+0

Какую версию компилятора вы используете? – rubenvb

+0

Версия MinGW, которую я использую, поставляется с GCC 4.7.2. Я добавил эту информацию к исходному сообщению. – kjoppy

+0

Кто-то проглотил т от int. –

ответ

1

Попробуйте выполнить предварительную обработку источника с помощью -E и проверьте, что на самом деле происходит с макросом o расширение или что-то переопределяет макрос.

Предварительно обработанный источник, без сомнения, будет очень длинным после #include с его зависимостями заголовка. Функция поиска текстового редактора, grep и findstr - ваши друзья здесь.

+0

Я сделал это и вижу, что RGB не расширяется. Это должно означать, что что-то возится с ним ... – kjoppy

+0

@kjoppy В предварительно обработанных источниках вы также должны видеть комментарии к имени заголовка и строке #. Вы видите 'wingdi.h' где-нибудь там? Вы можете перейти к этой строке, где RGB определенно определен и посмотреть, куда она пошла. Что-то еще не определило позже или, возможно, защитник 'ifdef' отрезал его? – greatwolf

+1

Это было хорошее предложение. Я обнаружил, что предполагаемый RGB-макрос не расширяется. Затем я обнаружил, что это было #undefed в одном из заголовков проекта, потому что оригинальному автору понадобилось имя для 3-байтовой структуры. Я просто переименовал 'RGB' в' RGB3' всюду в источнике проекта, удалил строку '#undef RGB', и все очень хреново. – kjoppy