2009-07-16 5 views
2

Ich mache eine sehr einfache Plattform unabhängig (zumindest das ist der Plan) Konsole App. Ich wechselte von conio.h zu pdCurses, um es möglich zu machen. Das Problem damit ist, dass in Windows mit Codeblocks und gcc ich ein Problem habe.pdCurses verwenden in Windows, vermasselt mit 3 gcc-Makros

Wenn ich einschließe, bekomme ich Tonnen von Fehlern. Sie alle betreffen 3 Makros, die sich alle in verschiedenen Quelldateien befinden:

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

Wenn ich undef diese 3 Makros wie folgt aus:

#include <curses.h> 


#undef move 
#undef erase 
#undef clear 

dann auch alle kompiliert. Wenn ich nicht undef nicht dann bekomme ich Tonnen von Fehlern über diese Makros.

Beispiel Fehler sind:

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| 

Wer noch keine Ahnung hat, warum dies geschieht? Und jede nicht so verdammt hässliche Art, das Problem zu korrigieren? Vielen Dank im Voraus für Ihre Eingabe.

Edit: Ich bekomme auch undefinierte Verweise auf verschiedene Dinge, wann immer ich pdcurses Funktionen aufrufen. Ich kann nicht verstehen warum. Ich habe die Bibliothek definitiv richtig verlinkt. Zum Beispiel indem man versucht, ein Zeichen auf dem Bildschirm echo ich:

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

es alles andere als schlecht Verknüpfung der Bibliothek sein kann? Und wie kann ich sehen, was mit der Verknüpfung von pdcurses von den oben genannten Fehlern falsch ist?

-Lefteris

Antwort

1

Für das Makro Problem, eine Suche nach „STL“ in der Datei curses.h und Sie finden sollen:

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

#endif /* NCURSES_NOMACROS */ 

Vielleicht können Sie eine Arbeit um damit zu finden.

BEARBEITEN: In meiner Kopie, wenn Sie NCURSES_NOMACROS definieren, wird die Definition aller Makros übersprungen. Soweit ich das gesehen habe, sind alle nur Komfort-Makros für den Standardbildschirm, damit Sie wirklich keine Funktionalität verlieren, sondern die Funktionen verwenden müssen, die explizit die Bildschirmvariable benötigen. Oder, ich nehme an, verwenden Sie Ihre eigenen Makros, die keine Namenskonflikte haben.

0

A. Ich weiß nicht, warum das Problem gibt es (es ist in MSVC nicht geschieht mit PDCurses), aber der „richtigen Weg“ ist ein eigenen Header zu implementieren, die die korrekten hat Anweisungen und schließen Sie das stattdessen ein.

B. Sieht für mich wie ein Linkfehler aus, aber warum zeigen Sie nicht den entsprechenden Code?

+0

Danke für A, ich werde versuchen, es so zu machen. Für B, ja sieht es für mich auch wie ein Verknüpfungsfehler aus, aber ich habe die Bibliothek korrekt mit Codeblöcken verknüpft, genau wie mit jeder anderen Bibliothek. Wie für den entsprechenden Code könnte es alles sein. Jede pdcurses-Funktion löst diese oder ähnliche nicht definierte Referenzen aus. – Lefteris