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

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top