Externe Klasse richtig einbinden, wie ? C++ 

Status
Für weitere Antworten geschlossen.

Mr Crown

Registered +
Registriert
Mai 2008
Beiträge
57
Ich bin im Moment dabei mich mit Klassen in C++ zu beschäftigen.
Jetzt bin ich an dem Punkt, andem es drei verschiedene Dateien gibt, die aus Hauptprogramm, Klassendeklaration und Definition der Methoden besteht.
Wie kann ich jetzt alle drei Dateien korrekt linken ?
Habe schon viel bei google und in Büchern gesucht, habe es aber noch nicht genau hinbekommen.
Beispiel:

Klassendeklaration
Code:
class meine Klasse
{
meine Klasse(int a);

public:
void meine Methode();
private:
int meine Variable;
};

Klassendefinition:
Code:
#include "meine Klasse.h"

meine Klasse::meine Klasse(int a):
meine Variable (a)
{ }
int meine Klasse::meine Methode()
{
//tut irgendwas
}

Hauptprogramm:
Code:
#include 
//irgendwo müsste ich jetzt meine Klasse einbinden

using namespace std;

int main()
{
//bla bla, auf die klasse zugreifen usw.
return 0; 
}

Ich wäre für jede Hilfe dankbar.

Mit freundlichen Grüßen

Mr Crown
 
So wie du es im Moment hast dürfte es auch nen compiler error geben...
PHP:
class meine Klasse {
ist keine gültige Definition.... der Klassenname muss ein Wort sein, leerzeichen sind nicht erlaubt. Zum beispiel so:
PHP:
class meineKlasse {

um die Klasse benutzen zu können musst du nur die header datei in der main.cpp hinzufügen

PHP:
#include 
#include "meineKlasse.h"

using namespace std;

int main()
{
meineKlasse meins = new meineKlasse(5);


//bla bla, auf die klasse zugreifen usw.

delete meineKlasse;
return 0; 
}
 
Danke erstmal. Ok das war ein zu schnell erstelltes Beispiel, das mit dem Leerzeichen im Klassennamen steht nicht in meinem original Code.
Ich stelle mich glaube ich immer noch zu blöd an, denn ich bekomme immer noch einen "[Linker error] undefined reference to 'meine Klasse::meineKlasse(int)'".
Also ich habe die "meineKlasse.h" in die "main.cpp" und in die "meineKlasse.cpp", in der die Klassendefinition steht, eingebunden. Wenn ich jetzt die "main.cpp" kompilliere bekomme ich den besagten Linker error.
Was mache ich falsch ?
 
Poste mal deinen gesamten source, dann kann man dir vielleicht helfen... So kann ich dir nicht sagen wo der fehler liegt, weil es theoretisch richtig ist...
 
Ok :

soldier.h:
PHP:
#include 
using namespace std;

class soldier
{
public:

soldier(int startHealth, int startStrenght);

int increaseHealth();

int decreaseHealth ();

int decreaseStrenght();

int increaseStrenght();

int fHealth();

int fStrenght();


private: 
int Health; 
int Strenght; 

};

soldier.cpp:
PHP:
#include "soldier.h"

soldier::soldier(int startHealth, int startStrenght):
Health (startHealth),
Strenght (startStrenght)
{} 

int soldier::increaseHealth()
{
Health ++;

return Health;
}

int soldier::decreaseHealth ()
{

Health --;

return Health;
}

int soldier::decreaseStrenght()
{
Strenght --;

return Strenght;
} 

int soldier::increaseStrenght()
{
Strenght ++;

return Strenght;
} 

int soldier::fHealth()
{
return Health;
}

int soldier::fStrenght()
{
return Strenght;
}

main.cpp
PHP:
#include 
#include 
#include 
#include "soldier.h"

using namespace std;

int main()
{
string spieler1, spieler2;

cout 
cin>> spieler1;

soldier sp1(5, 3);

cout 
cin>> spieler2;

soldier sp2(5, 3);

getch(); 

return 0;
}

Das ist jetzt nicht der gesamte Code, das wäre zu lang, aber bei diesem kleinen Teil bekomme ich die gleiche Fehlermeldung, wenn ich in main.cpp einen soldier erstellen will.
 
Ich kann keinen Fehler finden, bei mir im Visual Studio 2005 lässt es sich ohne probleme kompilieren und linken
 
Ich habe jetzt einfach mal in der main.cpp das "#include "soldier.h"" durch
"#include "soldier.cpp"" ersetzt, also statt der Klassendeklaration die Definition in die main.cpp eingebunden. Erstaunlicherweise hat das geklappt. Aber irgendwo habe ich mal gelesen, dass man keine ".cpp" per "#include" einbinden soll. Finde ich sehr merkwürdig. Naja, es klappt ja vorläufig.
Vielen Dank für deine Hilfe Zerd

Übrigens ich verwende Dev C++ von bloodshed.

Mit freundlichen Grüßen

Mr Crown
 
Halllo Mc_Crown,

wenn der Bloodshed mit "#include soldier.cpp" durchläuft, hast Du wahrscheinlich beim einbinden der "soldier.h" einen Fehler (Schreibfehler, anderes Verzwichniss, nicht ins Projekt hinzugefügt ...).

soldier.h stellt quasi die Verbindung zwischen den beinden .cpp-Dateien her.
Bloodshed war auch meine erste IDE, mit der ich auch ein größeres Projekt erstellt habe, muß also funktionieen.
Hast Du im Projekt-Erstellen-Dialog Konsolenanwendung angewählt?? DevC++ ist da schon etwas eigen ... Und der MingGW-Compiler, der da drunter steckt verhält sich nach ANSI-Standard ...

Grüße,

zeroNULL
 
Zuletzt bearbeitet von einem Moderator:
Danke zeroNULL.
Jetzt habe ich den Fehler gefunden. Ich hatte die Dateien vorher einfach nur im selben Ordner. Jetzt erst habe ich mal ein neues Projekt erstellt die 3 Dateien dem hinzugefügt, mit dem Resultat: es läuft alles wunderbar. Großartig.
Viele Dank.

Mit freundlichen Grüßen

Mr Crown
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten