"Nicht aufgelöstes externes Symbol"



  • Hi,

    kann mir jmd sagen, wieso das Programm hier nicht übersetzt wird?:

    #include "PrioQueue.h"
    
    	void BaseEl::display() {
    		cout << "Name des Patienten: " << name << "\n"
    			<< "Priorität: " << priority << endl;
    	}
    
    	void ListEl::display() {
    		cout << "Anamnese:" << endl;
    	}
    
    	void PrioQueue::display() {
    		//first->display();
    
    		cout << "Elemente in Liste: \n" <<
    			"|----------------|" << endl;
    	}
    
    	void PrioQueue::DeleteMax() {
    	}
    
    	void PrioQueue::Insert(Cell * atom) {
    
    	}
    
    int main() {
    	PrioQueue pq;
    
    // Hier ist das Problem: Ich kann kein ListEl Objekt erstellen..
    // wenn ich das auskommentiere, wird das Programm übersetzt
    	ListEl atom(9,"Peter","anamnese");
    
    	pq.display();
    	system("PAUSE");
    return 0;
    };
    

    Und hier die zugehörige Headerdatei:

    #include <string>
    #include <iostream>
    using namespace std;
    
    class Cell {
    
    private:
    	Cell * next; 
    
    public:
    	// Zu Beginn zeigt der Zeiger auf kein Objekt -> Liste ist leer
    	Cell() {
    		next = NULL;
    	}
    	virtual void display();
    	void setNext(Cell * n);
    	Cell* getNext();
    
    };
    
    class BaseEl : public Cell {
    private:
    	int priority;
    	string name;
    
    public:
    	BaseEl(int p, string n) : Cell() {
    		priority = p;
    		name = n;
    	}
    	void display();
    
    };
    
    class ListEl : public BaseEl {
    private:
    	string anamnese;
    
    public:
    
    	ListEl(int p,string n,string a) : BaseEl(p,n) {
    		anamnese = a;
    	}
    
    	void display();
    
    };
    
    class PrioQueue {
    
    public:
    	int elements; // Anzahl der Listenelemente
    	Cell * first; // Zeiger auf Zelle mit der höchsten Priorität
    	PrioQueue() {
    		elements=0;
    		first=NULL;
    	}
    	void display();
    private:
    	void Insert(Cell * atom);
    	void DeleteMax();
    
    };
    

    Hier der Compiler Log:

    1>methoden.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Cell::display(void)" (?display@Cell@@UAEXXZ)".
    1>C:\Users\****\Documents\Visual Studio 2008\Projects\****\Debug\*****.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Users\****\Documents\Visual Studio 2008\Projects\****\Debug\BuildLog.htm" gespeichert.
    1>**** - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Das Problem ist, wie ich im Sourcecode kommentiert habe, dass ich kein neues Objekt der Klasse ListEl erstellt bekomme..
    Sitze jetzt schon einige Stunden dran und wäre für den ein oder anderen Tipp dankbar!

    Grüße
    pun



  • Falsches Forum: Hier ist C++/CLI, nicht C++...
    Simon



  • theta schrieb:

    Falsches Forum: Hier ist C++/CLI, nicht C++...
    Simon

    Da hast du wohl recht.
    Bin irgendwie verrutscht..sry dafür.
    Kann das bitte jmd verschieben ?

    Grüße pun



  • Dein Linker teillt Dir mit, dass Cell::display() nicht defniert wurde.
    Entwerder definierst Du es oder Du machsts es pure virtual mit:
    virtual display() = 0;

    Simon



  • hey vielen lieben dank, das hat geklappt!
    Dass es etwas mit dem virtual zu tun haben musste, hab ich gesehn..nur war mir diese syntax noch nicht bekannt.

    also nochmal danke

    grüße pun


Log in to reply