undefined reference to



  • Hallo zusammen
    ich mache gerade meine ersten Schritte in objektorientierter Programmierung und bin auf ein Problem gestoßen.

    Hauptdatei:

    #include "ort1.h"
    #include <iostream>
    using namespace std;
    
    /* 
     * ===  FUNCTION  ======================================================================
     *         Name:  main
     *  Description:  
     * =====================================================================================
     */
    	int
    main ()
    {
    	Ort1 einOrt1;
    	einOrt1.aendern(100, 200);
    	cout<<"Der Ort hat die Koordinaten x = "<<einOrt1.X()<<" und y = "<<einOrt1.Y()<<endl;
    }				/* ----------  end of function main  ---------- */
    

    und Klasse:

    class Ort1{
    	public:
    		int X() const {return xKoordinate;}
    		int Y() const {return yKoordinate;}
    		void aendern(int x, int y){
    			xKoordinate=x;
    			yKoordinate=y;
    			std::cout<<"x = "<<xKoordinate
    				 <<" Y = "<<yKoordinate
    				 << std::endl;
    		}
    	private:
    		int xKoordinate, yKoordinate;
    	};
    

    gpp gibt leider immer folgende Fehlermeldungen aus:

    g++ ort1main.cpp
    /tmp/ccUT239H.o: In function main': ort1main.cpp:(.text+0x1d): undefined reference toOrt1::aendern(int, int)'
    ort1main.cpp:(.text+0x29): undefined reference to Ort1::Y() const' ort1main.cpp:(.text+0x37): undefined reference toOrt1::X() const'
    collect2: Fehler: ld gab 1 als Ende-Status zurück

    Ich finde beim besten Willen gerade den Fehler nicht und würde mich über jede Hilfe freuen 🙂



  • Der Fehler besagt, dass du etwas deklariert, aber nicht definiert hast. Wie schaut deine Header-Datei aus? Wie schaut deine cpp-Datei aus?



  • Rebuilde das Projekt mal.



  • Du zeigst nicht den Originalcode.



  • manni66 schrieb:

    Du zeigst nicht den Originalcode.

    👍
    Denn:

    ort1main.cpp:(.text+0x1d): undefined reference to Ort1::aendern(int, int)' ort1main.cpp:(.text+0x29): undefined reference toOrt1::Y() const'
    ort1main.cpp:(.text+0x37): undefined reference to `Ort1::X() const'

    Das ist gar nicht möglich. Du definierst alle drei in der Klasse.
    Wahrscheinlich hast du einfach vergessen, die Source in das Projekt einzubinden.



  • Hmm, ich versuche genau den Code zu kompilieren, den ich gepostet habe.
    An das Einbinden habe ich auch gedacht. Ich werde noch ein bisschen rumprobieren, vielleicht finde ich irgendwo einen versteckten Fehler....



  • RockLloque schrieb:

    Hmm, ich versuche genau den Code zu kompilieren, den ich gepostet habe.

    Kann echt nicht sein.

    In der Header-Datei ist <iostream> nicht eingebunden, du verwendest aber cout und endl. Das kann nur eines bedeuten: Du hast uns nicht die wirkliche ort1.h gezeigt.

    Führe bitte folgende Kommandos auf der Konsole aus und zeige uns die exakte Ausgabe (d.h. kopieren, nicht abschreiben. Loginnamen etc. kannst du gerne zensieren, aber nicht die Ausgaben):

    cat ort1.h
    cat ort1main.cpp
    g++ ort1main.cpp
    


  • Gerne 🙂
    Here we go

    ~/bs$ cat ort1.h

    #ifndef ort1_h
    #define ort1_h ort1_h
    
    class Ort1{
            public:
                    int X() const;
                    int Y() const;
                    void aendern(int x, int y); //x,y= neue Werte
            private:
                    int xKoordinate,
                        yKoordinate;
    
    };
    #endif
    

    ~/bs$ cat ort1main.cpp

    #include "ort1.h"
    #include <iostream>
    using namespace std;
    
    /* 
     * ===  FUNCTION  ======================================================================
     *         Name:  main
     *  Description:  
     * =====================================================================================
     */
            int
    main ()
    {
            Ort1 einOrt1;
            einOrt1.aendern(100, 200);
            cout<<"Der Ort hat die Koordinaten x = "<<einOrt1.X()<<" und y = "<<einOrt1.Y()<<endl;
    }                               /* ----------  end of function main  ---------- */
    

    ~/bs$ g++ ort1main.cpp
    /tmp/ccaeCa3I.o: In function main': ort1main.cpp:(.text+0x1d): undefined reference toOrt1::aendern(int, int)'
    ort1main.cpp:(.text+0x29): undefined reference to Ort1::Y() const' ort1main.cpp:(.text+0x37): undefined reference toOrt1::X() const'
    collect2: Fehler: ld gab 1 als Ende-Status zurück



  • In deiner Header-Datei in der Klasse stehen nur Prototypen der Funktionen.

    Du hast:

    int X() const;
    

    Solltest aber die Funktion X entweder direkt oder extern definieren:

    //Direkt:
    int X() const{return xKoordinate;}
    
    //Extern in ort1.cpp
    #include "ort1.h"
    int Ort1::X() const {return xKoordinate;}
    

    Das für jede Funktion natürlich und vorzugsweise extern, damit die Übersicht erhalten bleibt 😉



  • RockLloque schrieb:

    und Klasse:

    class Ort1{
    	public:
    		int X() const {return xKoordinate;}
    		int Y() const {return yKoordinate;}
    		void aendern(int x, int y){
    			xKoordinate=x;
    			yKoordinate=y;
    			std::cout<<"x = "<<xKoordinate
    				 <<" Y = "<<yKoordinate
    				 << std::endl;
    		}
    	private:
    		int xKoordinate, yKoordinate;
    	};
    

    RockLloque schrieb:

    Hmm, ich versuche genau den Code zu kompilieren, den ich gepostet habe.

    Das stimmt offensichtlich nicht:

    RockLloque schrieb:

    #ifndef ort1_h
    #define ort1_h ort1_h
    
    class Ort1{
            public:
                    int X() const;
                    int Y() const;
                    void aendern(int x, int y); //x,y= neue Werte
            private:
                    int xKoordinate,
                        yKoordinate;
    
    };
    #endif
    

    Wo ist die Implementierung der Funktionen geblieben?


Anmelden zum Antworten