Использование pdCurses в Windows, портит 3 макроса gcc - PullRequest
2 голосов
/ 16 июля 2009

Я делаю очень простое, независимое от платформы (по крайней мере, в плане) консольное приложение. Я перешел с conio.h на pdCurses, чтобы это произошло. Проблема в том, что в Windows, используя Codeblocks и gcc, у меня есть проблема.

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

CodeBlocks \ MinGW \ Bin .. \ Lib \ НКУ \ mingw32 \ 3.4.5 ........ \ включать \ C ++ \ 3.4.5 \ бит \

Если я откажусь от этих 3 макросов, как это:

#include <curses.h>


#undef move
#undef erase
#undef clear

тогда все хорошо компилируется. Если я не откажу, то получаю массу ошибок об этих макросах.

Примеры ошибок:

macro "move" passed 3 arguments, but takes just 2|
\bits\char_traits.h|185|error: invalid function declaration|
\bits\basic_string.h|604|error: expected `)' before '->' token|
\bits\basic_string.h|1039|macro "erase" passed 2 arguments, but takes just 0|

У кого-нибудь есть идеи, почему это происходит? И какой-нибудь не такой уж чертовски уродливый способ исправить проблему? Заранее спасибо за ваш вклад.

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

main.cpp|74|undefined reference to `__imp__SP'|
main.cpp|74|undefined reference to `__imp__stdscr'|
main.cpp|74|undefined reference to `__imp__stdscr'|

Может ли это быть чем-то иным, кроме плохого связывания библиотеки? И как я могу увидеть, что не так со связью pdcurses из вышеуказанных ошибок?

-Lefteris

Ответы [ 2 ]

1 голос
/ 16 июля 2009

Для проблемы с макросом выполните поиск «STL» в файле curses.h, и вы должны найти:

#ifdef __cplusplus
#ifndef NCURSES_NOMACROS
/* these names conflict with STL */
#undef box
#undef clear
#undef erase
#undef move
#undef refresh

#endif /* NCURSES_NOMACROS */

Может быть, вы можете найти способ обойти это.

РЕДАКТИРОВАТЬ: В моей копии, если вы #define NCURSES_NOMACROS, он пропустит определение всех макросов. Насколько я посмотрел, все они - просто удобные макросы для стандартного экрана, так что вы действительно не теряете никакой функциональности, но вы должны использовать функции, которые явно требуют экранной переменной. Или, я полагаю, используйте свои собственные макросы, в которых нет имен.

0 голосов
/ 16 июля 2009

A. Я не знаю, почему проблема существует (это не происходит в MSVC с PDCurses), но «правильный путь» - реализовать собственный заголовок с правильными директивами и включить его вместо этого.

B. Похоже, ошибка ссылки для меня, но почему бы вам не показать соответствующий код?

...