• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

getch() mit Xcode

  • Ersteller Ersteller hehemande
  • Erstellt am Erstellt am

hehemande

Gast
Hallo zusammen,

Ich brauche dringend eure Hilfe!
Ich habe nun seit gut 2 Monaten mein Ibook, und bin eigentlich super zu frieden.

Nur schreibe ich in der Schule C++ Programme mir Xcode, und benötige dringend einen Ersatz für getch(); (Zur info: Ist auf der Dose die Funktion, mit der sich ein zeichen ohne Eingabe von "Enter" einlesen lässt)

Vielen Dank im Voraus
 
curses.h inkludieren und gegen die betreffende Library linken.
 
Naja, du includest "curses.h" mit
Code:
#include <curses.h>
und linkst beispielsweise mit
Code:
int main()
{
   char Taste;
   Taste = 'getch()';
   if(Taste) cout << Taste << " gedrueckt...";
}
gegen die entsprechende Library -auch, wenn der o.g. Code nicht funzt...


Oder versteh ich da was falsch?
 
Zuletzt bearbeitet:
hmm,

leider erhalte ich die folgende Fehlermeldung beim Ausführen des Programms:
ZeroLink: unknown symbol '_stdscr'

Musterzeichner has exited due to signal 6 (SIGABRT).

Gruß
 
Du musst auch wirklich gegen die curses-Bibliothek linken (nicht nur die Deklarationen inkludieren)...
Auf der Konsole z.B. mit
Code:
g++ testprogramm.cpp -o testprogramm [B]-lcurses[/B]
 
Komisch. Hier mein Hauptprogramm, zum Ausschneiden:
Code:
#include <curses.h>
#include <iostream>

using namespace std;

int main()
{
  char taste;
  taste = getch();
  if (taste) cout << taste << " gedrueckt...";
}
Das heißt bei mir cursestest.cpp. Im Terminal dann einfach (wie oben)
Code:
g++ cursestest.cpp -o cursestest -lcurses
eingeben. Und genau das geht bei Dir nicht? Die Fehlermeldung kommt definitiv vom Linker.
 
Mal eine Frage: Wie erstellst Du denn die c++ Projekte? Ich mache das über C++ Tool, und dann nennt Xcode die Datei automatisch main.cpp.

Vielleicht liegt mein Fehler im Projekttyp?

Danke
 
Gehen denn normale *.cpp dateien, ohne jegliche Bibliotheken?
 
hehemande schrieb:
Mal eine Frage: Wie erstellst Du denn die c++ Projekte? Ich mache das über C++ Tool, und dann nennt Xcode die Datei automatisch main.cpp.
Zu meiner Schande muss ich gestehen, dass ich das nur im Terminal probiert habe. Wo man in Xcode einstellt, die libcurses dazuzulinken, weiß ich grad auch nicht :-!
 
Entweder schnall ichs nicht, oder wir reden aneinander vorbei...
Hast du schonmal überhaupt etwas Kompiliert?
Sowas z.B.:

Code:
#include <iostream>

int main()
{
 std::cout<< "Das ist ganz toll!";
 return 0;
}
und hast du das mit..

Code:
g++ dateiname.cpp
Kompiliert?

Sry, aber ich komm nicht ganz dahinter... :innocent:
 
Es geht ihm darum, das in Xcode zu machen. Ich hab jetzt mal sein Problem simuliert, komme auf das gleiche. In Xcode neues Projekt (Command Line Utility -> C++ Tool) erstellt, gleichen Code wie oben rein, ergibt gleichen Linkerfehler. Es liegt glaube ich daran, dass diese ZeroLink-Funktion von Xcode nicht erkennt, dass die libcurses dazu zu linken ist. So weit wie ich verstehe, wird da normalerweise aus den includeten Headers abgeleitet, welche Bibliotheken benötigt werden. Nur bei libcurses klappt's nicht. Da muss man anscheinend in der Build-Konfiguration manuell diese Bibliothek hinzufügen. Oder?
 
Also ich habe jetzt mal den Beispielcode mit Textedit geschrieben, abgespeichert, verlinkt und versucht über das Terminal zu compilieren.

Erhalte trotzdem Fehler:
Apple:~/desktop/schule/informatik michaelmuller$ g++ getch.cpp -o getch -lcursesApple:~/desktop/schule/informatik michaelmuller$ g++ getch.cpp
/usr/bin/ld: Undefined symbols:
_stdscr
_wgetch
collect2: ld returned 1 exit status

Viele Grüße
 
hehemande schrieb:
Erhalte trotzdem Fehler:
Das sieht aber irgendwie wirr aus. Es muss ein Befehl sein. Und kein Leerzeichen zwischen -l und curses.

EDIT: So z.B. bei mir
Code:
ne6e0:~/c++/cursestest thorsten$ g++ cursestest.cpp -o cursestest -lcurses
ne6e0:~/c++/cursestest thorsten$
 
Ein falsch gelinktes Programm sollte man nicht ausführen. Hast Du Dich denn mal um den Linkerfehler gekümmert?
 
In wie fern gekümmert? Ich dachte, das wäre mit obrigen Befehlen behoben, und beim Compilieren gibts ja auch keine Probleme mehr :-/