pdCurses usar no Windows, messes com 3 macros gcc
Pergunta
Estou fazendo um muito simples independente de plataforma (pelo menos esse é o plano) aplicativo console. I mudou de conio.h para pdCurses para que isso aconteça. O problema com isso é que no Windows, usando codeblocks e gcc Eu tenho um problema.
Quando eu incluo eu recebo toneladas de erros. Eles toda a preocupação 3 macros todos localizados em diferentes arquivos de origem dentro:
bin CodeBlocks \ MinGW \ .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ pedaços \
Se eu undef esses 3 macros como esta:
#include <curses.h>
#undef move
#undef erase
#undef clear
então tudo compila bem. Se eu não fizer undef então eu recebo toneladas de erros sobre estas macros.
erros Exemplo são:
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|
Alguém tem alguma idéia de por que isso acontece? E qualquer não tão maldita maneira feia para corrigir o problema? Agradecemos antecipadamente a sua entrada.
Edit: Eu também estou recebendo referências indefinidas para várias coisas, sempre que invoco quaisquer funções pdcurses. Eu não consigo entender o porquê. Eu definitivamente ligada a biblioteca corretamente. Por exemplo, tentando ecoar um char na tela eu recebo:
main.cpp|74|undefined reference to `__imp__SP'|
main.cpp|74|undefined reference to `__imp__stdscr'|
main.cpp|74|undefined reference to `__imp__stdscr'|
Pode ser qualquer coisa que não seja má ligação da biblioteca? E como eu posso ver o que está errado com a vinculação de pdcurses fromthe acima erros?
-Lefteris
Solução
Para o problema macro, faça uma busca por "STL" no arquivo curses.h e você deve encontrar:
#ifdef __cplusplus
#ifndef NCURSES_NOMACROS
/* these names conflict with STL */
#undef box
#undef clear
#undef erase
#undef move
#undef refresh
#endif /* NCURSES_NOMACROS */
Talvez você possa encontrar um trabalho em torno com isso.
EDIT: Em minha cópia se você #define NCURSES_NOMACROS ele irá ignorar a definição de todas as macros. Tanto quanto eu olhei todos eles são apenas macros de conveniência para a tela padrão para que você realmente não perderá nenhuma funcionalidade, mas você tem que usar as funções que requerem explicitamente a variável de tela. Ou, suponho, usar suas próprias macros que não têm conflitos de nome.
Outras dicas
A. Eu não sei por que o problema está lá (isso não acontece em MSVC com PDCurses), mas a "maneira correta" é implementar o seu próprio cabeçalho que tem as diretrizes corretas e que incluem em seu lugar.
B. Parece um erro ligando para mim, mas por que você não mostrar o código correspondente?