mehrere Dateien einbinden - C++

Mein Problem ist es, eine header-datei zu erstellen, die eine Klasse enthaelt, die drei externe Verweise enthaelt, die in einer eigenen .cpp-Datei deklariert sind.
Nun soll ein Anwenderprogramm, das auch in einer eigenen .cpp- Datei ist die header-datei mit der Klasse testen.
Leider meldet der Linker immer einen error 'unaufgeloeste externe Verweise'.
Ich denke die Header-Datei kan nicht auf die .cpp-Datei zugreifen, die die Deklarationen enthaelt.

Was kann ich gegen diesen Fehler tun?

Danke im Vorraus

Raptor
 
Die Funktionen(bzw vereise) müssen dem compiler bekannt sein bevor er andere Funktionen die die verweise nutzen übersetzen kann.

Schreib deine Klassen in eine Codedatei.
Schreib Prototypen und/oder setze die Daten in vernünftiger Reihenfolge zusammen.

mfg
 
also eigentlich hab ich genau das gemacht.
aber der compiler kann nicht dauf die verweise zugreifen
wenn es evtl. hilft koennte ich noch den code posten.
 
Eigentlich solltest du nicht direkt cpp Dateien einbinden, sondern .h Dateien in denen die Deklarationen stehen.

Erstellle also einfach für deine .cpp Datei mit den externen Symbolen eine .h Datei mit dem gleichen Namen und schreibe entsprechend die Prototypen hinein, dann inkludierst du die .h Datei statt der .cpp in der Klasse und es sollte theoretisch funzen. :)
 
Gut, hier noch einmal der Code...

der header-Datei ,die die Klasse enthaelt
Code:
#ifndef _class_date_
#define _class_date_
#include <string>
using namespace std;
class Artikel
{
private:
	long art_nr;
	string art_name;
	double art_price;
public:
	Artikel(long,const string&, double);    
	~Artikel();                                           // werden alle drei extern definiert
	void print();                                         
	void set_art_nr(long nr){art_nr=nr;}                                    //inline!
	void set_art_name(string name){art_name=name;}                          //inline!
	void set_art_price(double price){(price>0?art_price=price:price=0.0);}  //inline!
	long const* get_art_nr(void){return &art_nr;}                           //inline!
	string const* get_art_name(void){return &art_name;}                     //inline!
	double const* get_art_price(void){return &art_price;}                   //inline!
}
;
#endif

..und hier die externen Definitionen

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

Artikel::Artikel(long nr, const string& name, double price)
{
	
	cout << "Es wird ein Objekt fuer den Artikel " << art_name << " angelegt\n";
		
	art_nr=nr;
	art_name=name;
	art_price=price;
}

Artikel::~Artikel()
{
	cout << "Das Objekt fuer den Artikel " << art_name << " wird zerstoert\n" ;
}

void Artikel::print(void)
{
	cout << endl << art_nr << endl << art_name << endl << art_price << endl
		 << "Press Return" << endl;
	cin.get();
}

...und schlussendlich noch das Anwenderprogramm, dass die Klasse testet

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

void test(void);

class Artikel artikel1(43,"auto",99999);

int main()
{
	Artikel artikel2(234,"fahrrad",2345);
	test();
	return 0;
}
	 
 void test(void)
{
	static Artikel artikel3(432,"maus", 33);
	Artikel artikel4(4231,"auto2",54325);
	artikel1.print(); 
	artikel3.print();
	artikel4.print();  
}

So, das wars. :)
 
OK
Problem geloest! :)
Inzwischen erfordern es die Bedingungen Projekte anzulegen und eben nicht mehr einzelne Dateien. Nun kann der Compiler auf alle Ressourcen zugreifen, was er vorher nicht konnte.

Raptor
 
Zurück
Oben