File Format not recognized / Build Error Error 1 // Dev-Cpp

magibon

Grünschnabel
Hallo zusammen,

ich bin total am verzweifeln...
Praktikum für die FH in Alg/Dat am Beispiel C++.
Ich hab vorher keine Erfahrung in C++ gemacht.
Nur in Java und das is ja das ganze Problem...

Wir sollen ne Header-Datei erstellen und daraufhin diese in ner cpp-Datei testen. So. Ich hab Dev-Cpp.
Ich hab die Header noch nicht vollständig, aber schon mal alle wichtigen Klassen darin definiert. Es fehlt nur noch eine, die die anderen verwendet.
Nun hab ich um zu sehen wie richtig der Code bis zu diesem Punkt ist, dazu ne main geschrieben, denn was bisher vorhanden ist reicht vollkommen aus und ist schon sehr lang.


Struktur:

abstrakt: "class Cell" vererbt an class "BaseEl" vererbt an
"class ListEl" -----> alles im Projekt "Aufgabe1"


Dieser blöde Linker... Wie gesagt ich habe echt keine Ahnung von dem allem... ich hab hier iwo gelesen, dass man unter "Projekt Optionen -> Parameter" gewisse Dateien hinzufügen muss...
Wie ich das verstanden habe, habe ich bei "Linker" die Dateien: "makefile.win" und "Main.o" und auch mal "PrioQueue.h" hinzugefügt.... (und die anderen Felder)

Jetzt gibt er mir auch nicht 6 mal oder mehr aus: "[Linker Error] undefined reference to Cell:Cell...."
(Meine 1. (abstrakte) Basisklasse)

aber: "[Build Error] [Aufgabe1.exe] Error 1" und jetzt auch auch noch "File format not recognized" (OHNE Zusatz) nur noch diese beiden Meldungen...

Kann mir einer bitte sagen was ich machen soll
Ich find iwie nirgendwo wie man sowas korrekt macht und das ja so grundlegend...


Hier mal meine Header "PrioQueue.h" :

Code:
#include <string>
#include <iostream>

using namespace std;

#define PSEUDO NULL

class Cell {					
	
	private:					
		Cell * next;	
			
    public:
    Cell(Cell * p) {
		next = p;
	}
	
	Cell() {
         next = NULL;
    }

    void setNext(Cell * p) {
		next = p;
	}
	
	Cell * getNext() {
		return next;
	}
	
	virtual ~Cell()=0;
    virtual Cell * clone()=0;
	virtual void display()= 0;
    virtual int getPriority()= 0;	
    virtual string getName()=0;
   	
};

class BaseEl : public Cell {

	private:
		int priority;		
		string name;       

	public:
         BaseEl() : Cell(), priority( 0 ), name( PSEUDO ) {}
        
         BaseEl(string name_given, int prio_given) : Cell(), name( name_given ), priority( prio_given ) {};
         
         BaseEl(BaseEl& ref) {
               setNext(ref.getNext());
               name = ref.getName();
               priority = ref.getPriority();
        }
                        
        ~BaseEl() {}
         
        void display() {
	cout << "Name: " << name << '\n' << "Priorität: " <<   priority << endl;
        }
        
        BaseEl* getNext() {               
               return (BaseEl*)Cell::getNext();
        }
               
        void setNext(Cell* cell) {
             Cell::setNext( cell );
        } 
        
        string getName() {
                return name;
        }
        
        void setName(string& str) {
             name = str;
        }
         
         int getPriority() {
                return priority;
         }
         
         
         
         Cell* clone() {
              return new BaseEl(*this);
         }
         
         
         void setPriority(int i) {
              priority = i;
         }
         
};

class ListEl : public BaseEl {

	private:
		string anamnese;	
																										
	public:
        ListEl(const string& n, const string& anam, int p) :         BaseEl(n, p), anamnese( anam ) {}
        
        ListEl() : BaseEl(), anamnese( PSEUDO ) {}
        
        ~ListEl() {}
                 
        ListEl(ListEl& ref){
              setNext(ref.getNext());
              setName(ref.getName());
              setPriority(ref.getPriority());
              anamnese = ref.anamnese;
        }
                      
        void display() {
			cout << "Name: " << getName() << "\nPriorität: " << getPriority()  << "\nAnamnese: " << getAnamnese() << endl;
		    
        }

        Cell* getNext() {              
               return ((Cell*)this)->Cell::getNext();
        }
        
        void setPriority(int i) {
             BaseEl::setPriority( i );
        }
        
        string getName() {                              
               return BaseEl::getName();
               
        }
               
        void setName(string str) {
             BaseEl::setName( str ) ;
        }
        
        int getPriority() {
               return BaseEl::getPriority();
        }
                       
        string getAnamnese() {
               return anamnese;
        }
        
        Cell* clone(ListEl le) {
               return new ListEl(*this);
        }
    	

};


und jetzt meine main die im Moment nur sehr kurz, damit er ja überhaupt kompiliert... egal ob ich da schon Objekte erzeuge oder nicht und nur "return 0" er wirft oben genannte Fehler... :

Code:
#include "PrioQueue.h"
#include <iostream>
#include <string>
using namespace std;
 

int main() {
	
    ListEl LE, LL;
       
	LL.display();
	getchar();
	
    return 0;
	
};



Bittebittebitte kann mir einer helfen ich dreh noch durch...


mfg magi
 
Habs mal grob durchgeschaut; anscheinend sind alle Methoden in der Headerdatei schon drinnen-
dh du musst eigentlich beim Linker gar nichts verstellen
Probiers einfach einmal ohne Zusatzangaben aus

Auf was hast du denn undef. References?
 
Zuletzt bearbeitet:
Was meinst du genau mit "auf was hab ich undef. References" ?


Wenn ich bei Linker nichts verstell kommen folgende Fehlermeldungen:

"In function 'ZN6BaseEl7getNextEv" <----- "getNext()" is ja ne Methode vom abstrakten Typ Cell -

dann kommt noch 5 mal:

"[Linker Error] undefined reference to 'Cell::~Cell()' " <--- "~Cell()" is mein Destruktor der abstr Klasse... die Kostruktoren der abgeleiteten Klassen hab ich auch erst mal leer definiert, da ja ein Default-Constructor existiert ... ? oder ?

und noch 1 mal die Meldung:

"more undefined reference to 'Cell::~Cell' follow "

hab eine Fehlermeldung vergessen die noch zusätzlich angezeigt wird:

"[Build Error] [Aufgabe1.exe] Error 1"
 
Hi.
Dieser blöde Linker... Wie gesagt ich habe echt keine Ahnung von dem allem... ich hab hier iwo gelesen, dass man unter "Projekt Optionen -> Parameter" gewisse Dateien hinzufügen muss...
Wie ich das verstanden habe, habe ich bei "Linker" die Dateien: "makefile.win" und "Main.o" und auch mal "PrioQueue.h" hinzugefügt.... (und die anderen Felder)
Da hast du etwas missverstanden. Beim Linker werden nur externe Bibliotheken angegeben. D.h. Dateien die entweder die Endung .lib oder .a haben.

Du mußt einfach nur alle deine .c .cpp und .h Dateien zu deinem Projekt hinzufügen.

Gruß

Wenn ich bei Linker nichts verstell kommen folgende Fehlermeldungen:

"In function 'ZN6BaseEl7getNextEv" <----- "getNext()" is ja ne Methode vom abstrakten Typ Cell -

dann kommt noch 5 mal:

"[Linker Error] undefined reference to 'Cell::~Cell()' " <--- "~Cell()" is mein Destruktor der abstr Klasse... die Kostruktoren der abgeleiteten Klassen hab ich auch erst mal leer definiert, da ja ein Default-Constructor existiert ... ? oder ?
Was meinst du mit leer? Du hast keine Definition angegeben. Ein Default-Destruktor wird nur generiert, wenn du in der Klasse keinen Destruktor deklarierst.

\edit: Hab grad gesehen das du den Destruktor als pur virtuell deklariert hast. In diesem Fall mußt du den Destruktor selbst außerhalb der Klasse definieren
C++:
Cell::~Cell() {}

Gruß
 
Zuletzt bearbeitet:
Zurück