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).


Anmelden zum Antworten