pdCurses используется в Windows, портит 3 макроса gcc

StackOverflow https://stackoverflow.com/questions/1139067

  •  16-09-2019
  •  | 
  •  

Вопрос

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

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

CodeBlocks\MinGW\bin..\lib\gcc\mingw32\3.4.5........\include\c++\3.4.5\bits\

Если я отменю определение этих трех макросов следующим образом:

#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|

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

Редактировать:Я также получаю неопределенные ссылки на различные вещи всякий раз, когда вызываю какие-либо функции 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 из вышеописанных ошибок?

-Лефтерис

Это было полезно?

Решение

Чтобы решить проблему с макросом, выполните поиск «STL» в файле Curs.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, определение всех макросов будет пропущено.Насколько я понимаю, все они представляют собой просто удобные макросы для стандартного экрана, поэтому вы действительно не теряете никакой функциональности, но вам придется использовать функции, которые явно требуют переменную экрана.Или, я полагаю, используйте свои собственные макросы, у которых нет конфликтов имен.

Другие советы

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

Б.Мне кажется, это ошибка связывания, но почему бы вам не показать соответствующий код?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top