Domanda

Sto facendo un semplice indipendente dalla piattaforma (almeno questo è il piano) console app. Ho cambiato da conio.h a pdCurses per farlo accadere. Il problema di questo è che in Windows, utilizzando CodeBlocks e gcc ho un problema.

Quando mi includo ricevo tonnellate di errori. Hanno tutti riguardano 3 macro tutti situati nella fonte diversa file all'interno:

CodeBlocks \ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ C ++ \ 3.4.5 \ bit \

Se io Undef quei 3 macro in questo modo:

#include <curses.h>


#undef move
#undef erase
#undef clear

allora tutto compila bene. Se non Undef poi ricevo tonnellate di errori su queste macro.

errori di esempio sono:

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|

Qualcuno ha qualche idea del perché questo accade? E un modo non così dannatamente brutto per correggere il problema? Grazie in anticipo per il vostro input.

Edit: Inoltre sto ottenendo i riferimenti non definiti per varie cose ogni volta invoco alcuna funzione pdcurses. Non riesco a capire il perché. Io sicuramente collegato la libreria in modo corretto. Per esempio, cercando di eco un char sullo schermo ottengo:

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

Può essere qualcosa di diverso da cattivo collegamento della biblioteca? E come posso vedere che cosa c'è di sbagliato con il collegamento di pdcurses fromthe sopra errori?

-Lefteris

È stato utile?

Soluzione

Per il problema macro, fare una ricerca per "STL" nel file curses.h e si dovrebbe trovare:

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

#endif /* NCURSES_NOMACROS */

Forse si può trovare un lavoro in giro con questo.

EDIT: Nella mia copia se #define NCURSES_NOMACROS che salterà definire tutte le macro. Per quanto mi guardavo tutti loro sono solo le macro di convenienza per lo schermo standard in modo che davvero non si perde alcuna funzionalità, ma è necessario utilizzare le funzioni che richiedono esplicitamente la variabile schermo. O, suppongo, utilizzare le proprie macro che non hanno nome scontri.

Altri suggerimenti

A. Non so il motivo per cui il problema è lì (non accade in MSVC con PDCurses), ma il "modo giusto" è quello di implementare il proprio colpo di testa che ha le direttive giuste e comprendono che, invece.

B. Si presenta come un errore di collegamento a me, ma perché non si mostra il codice corrispondente?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top