Pregunta

Estoy haciendo una plataforma muy sencilla independiente (al menos ese es el plan) aplicación de consola. He cambiado de conio.h a pdCurses para que esto ocurra. El problema con esto es que en Windows, usando bloques de código y gcc tengo un problema.

Cuando incluyo consigo toneladas de errores. Todas ellas se refieren 3 macros todos ubicados en diferentes archivos fuente en el interior:

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

Si no def esos 3 macros como esto:

#include <curses.h>


#undef move
#undef erase
#undef clear

compila entonces todo bien. Si no UNDEF entonces consigo toneladas de errores sobre estas macros.

Ejemplo errores son:

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|

Alguien tiene alguna idea de por qué sucede esto? Y de cualquier manera no tan condenadamente feo para corregir el problema? Gracias de antemano por su entrada.

Edit: También estoy recibiendo referencias indefinidas a varias cosas cada vez que invoco ninguna función pdcurses. No puedo entender por qué. Definitivamente vinculado correctamente la biblioteca. Por ejemplo, tratando de eco de un char en la pantalla me sale:

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

¿Puede ser que no sea mala vinculación de la biblioteca algo? Y cómo puedo ver lo que está mal con la vinculación de pdcurses fromthe por encima de errores?

-Lefteris

¿Fue útil?

Solución

Para el problema macro, hacer una búsqueda de "STL" en el archivo curses.h y usted debe encontrar:

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

#endif /* NCURSES_NOMACROS */

Tal vez usted puede encontrar un trabajo en torno a eso.

EDIT: En mi copia si #define NCURSES_NOMACROS se saltará la definición de todas las macros. Por lo que yo veía todos ellos son macros convenientes sólo para la pantalla estándar, por lo que realmente no se pierde ninguna funcionalidad pero hay que utilizar las funciones que requieren explícitamente la variable de la pantalla. O, supongo, utilizar sus propias macros que no tienen conflictos de nombre.

Otros consejos

A. No sé por qué el problema es que hay (que no sucede en MSVC con PDCurses), pero la "forma correcta" es poner en práctica su propio encabezado que tiene las directivas y mostrar esa vez.

B. Se parece a un error de vincular a mí, pero ¿por qué no mostrar el código correspondiente?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top