• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

getch() mit Xcode

  • Ersteller hehemande
  • 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
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
curses.h inkludieren und gegen die betreffende Library linken.
 

stoebe

Uelzener Rambour
Registriert
23.12.05
Beiträge
371
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:

hehemande

Gast
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ß
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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]
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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.
 

hehemande

Gast
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
 

marius

Gast
Gehen denn normale *.cpp dateien, ohne jegliche Bibliotheken?
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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 :eek:
 

marius

Gast
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:
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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?
 

marius

Gast
aha, nun ehm... dann vergiss das was ich gesagt habe. :)
 

hehemande

Gast
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
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
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$
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Ein falsch gelinktes Programm sollte man nicht ausführen. Hast Du Dich denn mal um den Linkerfehler gekümmert?
 

hehemande

Gast
In wie fern gekümmert? Ich dachte, das wäre mit obrigen Befehlen behoben, und beim Compilieren gibts ja auch keine Probleme mehr o_O