C++ Erstes Programm (in Linux)



  • Hallo,
    bin neu hier ^^ versuche mal C++ zu erlernen (Kenne schon PHP, MySQL, und einwenig Java), doch irgendwie will es nicht laufen ­čĽÂ Aso, linux habe ich auch erst seit kurzem. Folgender Script hat unter windows mit Dev-C++ wunderbar geklappt, doch unter linux l├Ąuft nicht.

    Also, ich programmiere mit Kate editor.

    #inclide <iostream>
    
    int main(void){
      int a;
    
      cin >> a;
      cout << "Eingabe: " << a;
    
      return 0;
    }
    

    So, dies will aber nicht funktionieren, kompilierung mit "gcc test.cpp" klappt nicht, kommen diverse fehler, cin und cout unbekannt usw...
    Dachte die sind in dem iostream enthalten o_0.
    Was mache ich falsch ­čśĽ

    Ach, noch ne nebenfrage ^^
    - Wo kann ich unter Linux C++ Pakete/Header ansehen die vorhanden sind??



  • std::cin
    std::cout

    include nicht inclide



  • /usr/include/
    /usr/local/include

    Hilfe zu den Funktionen findest du mit man funktionsname



  • Was f├╝r pakete es gibt und wie du die einsehen kannst h├Ąngt von deinem distributor/paketmanager ab.
    Includes h├Ąngen vom Include-Pfad ab (du kannst mit -Idirectory auch neue hinzuf├╝gen). /usr/include wird wohl drinnen sein, wenn dus genau wissen willst compilier mal mit --verbose.
    Achja, Fehlermeldungen sind dazu da, (dir) zu sagen, was falsch l├Ąuft. Die kann man sich durchlesen, oder zumindest bei der Fragestellung mit angeben.



  • Hopala, das mit INCLUDE, da habe ich mich vertippt, in der eigentlichen .cpp datei is es aber richtig. ^^

    Habe das gerade mit "std::cin" und "std::cout" ausprobiert, l├Ąuft nicht.
    Die Konsole wirft mir lauter Fehler um die Ohren, alles "undefined reference" sagt er.

    undefined reference to ┬┤std::cin┬┤
    undefined reference to ...

    usw...



  • Jo, ich w├╝rd auch den g++ nehmen, wenn ich C++ Quellcode ├╝bersetzen m├Âchte und nicht den C Compiler gcc ­čśë

    Also Quelltext:

    #include <iostream>
    
    int main() {  //das void ist nur bei C ├╝blich, nicht bei C++
      int a=0;  //Am Besten gleich initialisieren
    
      std::cin >> a;
      std::cout << "Eingabe: " << a << '\n';
    
      return 0;
    }
    

    wird mit

    g++ -o test test.cpp
    

    kompiliert.

    MfG

    GPC



  • d3rbastl3r schrieb:

    kompilierung mit "gcc test.cpp" klappt nicht

    "g++ test.cpp"



  • ahh, danke euch ^^ g++ test.cpp klappt wunderbar und auch die HeaderDateien habe ich gefunden ­čÖé



  • Du fragst dich bestimmt, wie du Text aus der Konsole herauskopierst, einfach markieren, und ohne es wieder wegzuklicken woanders hin mit der mittleren Maustaste klicken.

    und damit du nicht st├Ąndig std::cin etc verwenden musst schreib einfach man using namespace std; ├╝ber die main-Funktion. Das war unter Windows ├╝briges auch nicht andern mit std.

    Ich verwende ├╝brigens auch kate, ist voll geil der Editor. (Du kannst dir ├╝brigens im Kate Editor selbst eine Konsole anzeigen lassen.)

    dann m├Âchtest du bestimmt noch wissen, wie das genau mit dem Linken von verschiedenen Quelldateien funktioniert, einfach folgende Datei mit den Passenden Dateinamen ersetzen, und die SDL teile kannst du rausl├Âschen, die stehen da nur als Beispiel drin, wenn du mal Linker- und Kompilerflags brauchst. Allerdings solltest du die Variabelnamen beibehalten, nur den Inhalt l├Âschen, sonst k├Ânnte es Probleme geben glaub ich.

    CC = g++
    OBJ = main.o modul1.o modul2.o
    APP = programmname
    CFLAGS = $(shell sdl-config --cflags) # evtl auch noch -O2 f├╝r Optimierungen, oder -Wall f├╝r Warnungen
    LDFLAGS = -lm $(shell sdl-config --libs)
    
    # das hauptziel (die syntax ist immer: "ziel: abh├Ąngigkeiten\n\tbefehle", also unbediengt mit dem tab einr├╝cken...)
    all: $(OBJ)
    	$(CC) $(LDFLAGS) -o $(APP) $(OBJ)
    
    # generelle Regel zum Erzeugen von Objektdateien (.o) aus dem Quellcode (.cpp)
    .cpp.o:
    	$(CC) $(CFLAGS) -c $<
    
    # das ist ganz n├╝tzlich zum Aufr├Ąumen ;)
    clean:
    	rm -rf $(OBJ) $(APP)
    
    # zus├Ątzliche Abh├Ąngigkeiten (da make nun schon wei├č, wie es aus einer .cpp datei zu einer .o Datei kommt, reichen hier einfach die Dateien von denen das Modul abh├Ąngt. Wenn du dann z.B. eine Headerdatei ├Ąnderst, dann wird das entsprechende Objektfile automatisch neu kompiliert und dann wieder zu dem Programm gelinkt.
    main.o: main.cpp common.h
    modul1.o: modul1.cpp modul1.h common.h
    modul2.o: modul2.cpp modul2.h
    

    Das ganze muss dann als Datei Namens Makefile gespeichert werden, und mit make kannst du dann kompilieren.



  • @Krux ^^ Deine Tipps sind wahrscheinlich ganz n├╝tzlich, leider bin ich mit C++ noch nicht soweit dass ich das ganze verstehe, kurzgesagt ka was du damit meinst ­čÖé

    Achso, wollt noch was fragen ^^ (Wollte keinen neuen Tread aufmachen) und zwar:
    -> Ich starte also mein Proggi, dieses soll dann einen Consolebefehl ausf├╝hren z.B.: "cd /root/Desktop/xyz" oder vielleicht "dir" oder was weis ich, also, will damit einpaar operationen automatisieren, doch am ende soll es stehen bleiben, so als ob ich die Befehle selber ausgef├╝hrt habe, damit ich dann ganz normal manuell weitere Befehle eingeben kann.

    Dies sollte schonmal mir ├╝bung mit c++ verschaffen ­čśâ



  • Wenn du einen Konsolenbefehl ausf├╝hren willst, solltest du dir mal die Funktion system() ansehen (man 3 system -> da gibt's die Hilfe dazu ­čśë )



  • d3rbastl3r schrieb:

    @Krux ^^ Deine Tipps sind wahrscheinlich ganz n├╝tzlich, leider bin ich mit C++ noch nicht soweit dass ich das ganze verstehe, kurzgesagt ka was du damit meinst ­čÖé

    Achso, wollt noch was fragen ^^ (Wollte keinen neuen Tread aufmachen) und zwar:
    -> Ich starte also mein Proggi, dieses soll dann einen Consolebefehl ausf├╝hren z.B.: "cd /root/Desktop/xyz" oder vielleicht "dir" oder was weis ich, also, will damit einpaar operationen automatisieren, doch am ende soll es stehen bleiben, so als ob ich die Befehle selber ausgef├╝hrt habe, damit ich dann ganz normal manuell weitere Befehle eingeben kann.

    Dies sollte schonmal mir ├╝bung mit c++ verschaffen ­čśâ

    OK es ist ja aber auch kein c++, aber wahrscheinlich hast du bisher noch nicht mit mehreren Dateien gearbeitet, solltest du dir auch auch sehr fr├╝h aneignen dies zu tun, und wenn du es tust, dann verwende die Makefiles von da oben.

    mit dem eben genannten befehl System kannst du die Systembefehle aus einem c++ Programm heraus aufrufen, einfach den entsprechenden Systembefehl in Auf├╝hrungszeichen in die klammer setzen, und Ausf├╝hren.
    Willst du aber eine Stapelverarbeitung ├Ąnlich bat dateien unter windows, kannst du .sh dateien erstellen, die muss du allerdings erst noch unter den Dateiberechtigungen auf auf├╝hrbar stellen (rechtsklick eigenschaften).


Log in to reply