Frage

Ich mache eine sehr einfache plattformunabhängige Konsole app (zumindest, dass der Plan). Ich wechselte von conio.h zu pdCurses es geschehen zu lassen. Das Problem dabei ist, dass in Windows, mit Codeblöcken und gcc Ich habe ein Problem.

Als ich schließe ich Tonnen von Fehlern erhalten. Sie alle betreffen 3 Makros alle in verschiedenen Quelle befindet sich Dateien in:

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 alle kompiliert gut. Wenn ich 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 hat eine Ahnung, warum dies geschieht? Und jeder nicht so verdammt hässlich Weg, um das Problem zu beheben? Vielen Dank im Voraus für Ihre Eingabe.

Edit: Ich bin auch nicht definierte Verweise auf verschiedene Dinge bekommen, wenn ich irgendwelche pdcurses Funktionen aufzurufen. Ich kann nicht verstehen, warum. Ich verknüpfen definitiv die Bibliothek richtig. Zum Beispiel indem man versucht, ein Zeichen auf dem Bildschirm echo erhalte 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'|

Kann es etwas anderes als schlechte Anbindung der Bibliothek sein? Und wie kann ich sehen, was mit der Verknüpfung von pdcurses falsch obigen Fehlern fromthe?

-Lefteris

War es hilfreich?

Lösung

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

#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 finden.

EDIT: In meiner Kopie, wenn Sie NCURSES_NOMACROS #define es wird überspringen alle Makros zu definieren. Soweit ich sie alle sahen nur Bequemlichkeit Makros für Standard-Bildschirm, so dass Sie wirklich keine Funktionalität verlieren, aber Sie müssen die Funktionen verwenden, die explizit den Bildschirm Variable erfordern. Oder ich nehme an, Ihre eigenen Makros verwenden, die keine Namenskonflikte haben.

Andere Tipps

A. Ich weiß nicht, warum das Problem gibt es (es geschieht nicht in MSVC mit PDCurses), aber der „richtigen Weg“ ist ein eigenen Header zu implementieren, die die richtigen Richtlinien haben und beinhalte, dass statt.

B. Sieht aus wie ein Verbindungsfehler zu mir, aber warum nicht zeigen Sie den entsprechenden Code?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top