... undefined reference to ...



  • Hallo,

    da ich per FAQ und Suche nichts gefunden habe das mir weiterhilft muß ich euch mit meinem Anfängerproblem um Rat bitten.
    C++ ist für mich Neuland und deshalb habe ich zur übung eine verkette Liste programmiert. Allerdings will der Compiler die Sourcen nicht übersetzen sondern spuckt nur sehr viele "... undefined reference to ..." Meldungen aus (obwohl ich alles per #include "xxxx.h" inkludiert habe):

    make -k all 
    g++  -o Test Test.cpp 
    /tmp/ccSrchUX.o: In function `main':Test.cpp:(.text+0x23): undefined reference to `MyList::MyList()'
    :Test.cpp:(.text+0x36): undefined reference to `MyList::pushFront(int)'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [Test] Fehler 1
    g++  -o MyList MyList.cpp 
    /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../lib/crt1.o: In function `_start':../sysdeps/i386/elf/start.S:115: undefined reference to `main'
    /tmp/ccvThxUG.o: In function `MyList::pushFront(int)':MyList.cpp:(.text+0x78): undefined reference to `ListElement::ListElement(int, ListElement*, ListElement*)'
    :MyList.cpp:(.text+0x9c): undefined reference to `ListElement::setPrevious(ListElement*)'
    :MyList.cpp:(.text+0xb2): undefined reference to `ListElement::setNext(ListElement*)'
    :MyList.cpp:(.text+0xc6): undefined reference to `ListElement::setData(int)'
    :MyList.cpp:(.text+0x124): undefined reference to `ListElement::ListElement(int, ListElement*, ListElement*)'
    :MyList.cpp:(.text+0x140): undefined reference to `ListElement::setNext(ListElement*)'
    :MyList.cpp:(.text+0x14b): undefined reference to `ListElement::getPrevious()'
    :MyList.cpp:(.text+0x15e): undefined reference to `ListElement::setPrevious(ListElement*)'
    :MyList.cpp:(.text+0x172): undefined reference to `ListElement::setPrevious(ListElement*)'
    :MyList.cpp:(.text+0x186): undefined reference to `ListElement::setData(int)'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [MyList] Fehler 1
    g++  -o ListElement ListElement.cpp 
    /usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../lib/crt1.o: In function `_start':../sysdeps/i386/elf/start.S:115: undefined reference to `main'
    collect2: ld gab 1 als Ende-Status zurück
    make: *** [ListElement] Fehler 1
    make: Das Target »all« wurde wegen Fehlern nicht aktualisiert.
    

    Da es anscheinend besonders viele Fehler in MyList.cpp gibt hier auch noch der Code dieser Datei:

    #include "MyList.h"
    #include "ListElement.h"
    //using namespace std;
    
    // +++++++++++++    Konstruktoren    ++++++++++++++
    	MyList::MyList(){
    		size = 0;
    		first = 0;
    	}
    
    // +++++++++++++++    Methoden    +++++++++++++++++
    
    	void MyList::pushBack(int newLast){
    
    	}
    
    	void MyList::pushFront(int data){
    		//falls Liste leer ist
    		if (first == 0) {
    			//neues Element erstellen
    			ListElement *newFirst = new ListElement();
    			first = &(*newFirst);
    
    			//Zeiger umbiegen
    			first->setPrevious(first);
    			first->setNext(first);
    
    			//Daten setzen
    			first->setData(data);
    		}
    
    		// falls bereits Elemente vorhanden sind
    		else {
    			//bisheriges firstElement speichern
    			ListElement *tmp = &(*first);
    
    			// neues firstElement erstellen
    			first = new ListElement();
    
    			// Zeiger umbiegen	
    			first->setNext(tmp);
    			first->setPrevious(tmp->getPrevious());
    			tmp->setPrevious(first);
    
    			//in first Daten einfuegen
    			first->setData(data);
    		}		
    	}
    
    	ListElement& MyList::pop_back(){
    
    	}
    
    	ListElement& MyList::pop_front(){
    
    	}
    
    	void MyList::insert(int pos, int ele){
    
    	}
    
    	ListElement& MyList::del(int pos){
    
    	}
    

    und ListElement.cpp noch:

    #include "ListElement.h"
    
    // +++++++++++++    Konstruktor    ++++++++++++++
    
    	ListElement::ListElement(int dat, ListElement *prev, ListElement *nex){
    		previous = prev;
    		next = nex;
    		data = dat;
    	}
    
    // +++++++++++++++    Methoden    +++++++++++++++++
    	ListElement* ListElement::getPrevious(){
    		return previous;	
    	}
    
    	ListElement* ListElement::setPrevious(ListElement *newPrev){
    		ListElement *tmp = previous;
    		previous = newPrev;
    		return tmp;
    	}
    
    	ListElement* ListElement::getNext(){
    		return next;	
    	}
    
    	ListElement* ListElement::setNext(ListElement *newNext){
    		ListElement *tmp = next;
    		next = newNext;
    		return tmp;
    	}
    
    	int ListElement::getData(){
    		return data;	
    	}
    
    	void ListElement::setData(int w){
    		data = w;	
    	}
    

    Schonmal vielen Dank für Eure hilfe! Und nicht böse sein wenn ich mit dem falschen Schlüsselwort die Suche betätigt habe 🙂
    Bei Bedarf kann ich auch noch die Header-Dateien posten.

    Viele Grüße Zotteljeti



  • "undefined reference to" bedeutet, dass der Compiler den Quellcode zu einem Symbol (zB Funktion, Variable) nicht finden kann, die du im Code benutzt. Sprich du hast den Code nicht richtig gelinkt.

    Schau mal in das Handbuch zu deinem Compiler, da dürfte sicher einiges an Information stehen...


Anmelden zum Antworten