Kompilieren mit dem Terminal.



  • Hallo allerseits,

    meine Frage ist denke ich nicht weiter kompliziert, aber ich konnte bisher keine Antwort darauf finden. Ich habe C++mit Eclipse angefangen zu programmieren und keine weitern Probleme gehabt. Nun wollte ich den Code mit TextMate schreiben und über das Terminal kompilieren. Als Output bekomme ich nun:

    USER:test_tm USER$ g++ -o main main.cc
    Undefined symbols for architecture x86_64:
      "Klasse::getAnzahl()", referenced from:
          _main in main-02f330.o
      "Klasse::Klasse(int)", referenced from:
          _main in main-02f330.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    Das Projekt ist relativ simpel gehandhabt nur zum testen. Ich schätze mal, das er nicht korrekt auf die "Klasse.h" sowie "Klasse.cc" Datei zugreifen kann. Verstehen zur ich es aber nicht wirklich 😕

    Main.cc

    #include "Klasse.h"
    #include <iostream>
    
    int main(){
    
    	Klasse *a;
    	a = new Klasse(1);
    
    	std::cout << a->getAnzahl();
    
    	return 0;
    }
    

    Klasse.h

    #ifndef KLASSE_H_
    #define KLASSE_H_
    
    class Klasse {
    
    private:
    	int anzahl;
    public:
    	int	getAnzahl();
    	void ausgabe();
    
    	Klasse();
    	Klasse(int);
    	virtual ~Klasse();
    };
    
    #endif
    

    Klasse.cc

    #include "Klasse.h"
    
    Klasse::Klasse(){
    	anzahl = 0;
    }
    
    Klasse::Klasse(int x){
    	anzahl = x;
    }
    
    Klasse::~Klasse(){
    
    }
    
    int Klasse::getAnzahl(){
    	return anzahl;
    }
    

    Vielleicht kann mir jemand einen kleinen Gedankenklaps auf den Hinterkopf geben 🙂

    Grüße almi



  • Siehe z.B. die beiden ersten Antworten in diesem Thread.



  • Habe mir das jetzt mal angeschaut und merke, das die IDE was das linken angeht doch sehr viel mehr abzunehmen scheint. Da werde ich mich wohl mal reinfuchsen müssen.

    Zu dem Destruktor muss ich sagen, das wir C++ erst dieses Semester in der Universität begonnen haben. Das höchste der Gefühle war eine Ausgabe im Destruktor á la: "Objekt gelöscht". Was würde man dann aus Erfahrung sonst ausführen. Ich bin der Meinung es so verstanden zu haben, dass dem Destruktor keine Parameter übergeben werden kann.



  • Er will damit sagen, dass du keinen eigenen Destruktor brauchst (klar, denn deiner macht ja nichts) und der automatisch vom Compiler generierte reicht.


  • Mod

    Upps, da wollte ich einen Tippfehler korrigieren und habe versehentlich meinen Beitrag gelöscht 🙂



  • aLMiCa schrieb:

    USER:test_tm USER$ g++ -o main main.cc
    

    Wenn du alles mit einem einzigen g++ Aufruf kompilieren und linken willst, dann musst du auch alle Source Files angeben.
    Versuch es mal mit g++ -o main main.cc klasse.cc



  • Mal so nebenbei: die Dateiendung .cc ist sehr selten anzutreffen. die meisten verwenden wohl .cpp

    Zudem sieht insbesondere

    Klasse *a;
        a = new Klasse(1);
    

    komisch aus. Meistens schreibt man direkt

    Klasse a(1);
    

Anmelden zum Antworten