[C++] eine Klasse in mehreren Dateien?

Ich code schon seit längerem C++, aber bisher zum ersten mal an einem bissl größerem Projekt. Ich habe mich dazu entschieden, mehre Dateien zu verwenden (zwecks Übersicht, Debug-erleichterung, ...)

Leider stehe ich jetzt vor einem Problem: Ich habe in Datei a eine Klasse, und brauche die in Datei b und c. Leider meldet der Compiler dann, dass die Klasse schon in b.obj bzw. c.obj definiert sei.

Hier ein Beispiel-Pseudocode:

a.h
Code:
#ifndef _a_h
#define _a_h

class a {
...
};

#endif

b.cpp
Code:
#include "a.h"

a blub;
...

c.cpp
Code:
#include "a.h"

a blub2;
...


mfg
 
Also... so übermäßig viel Ahnung hab ich jetzt nicht, aber wie wäre es, wenn du einen Header mit den Klassen darin schreibst?

Dann könntest du diesen in alle Programme einbinden.

Gruß, D31~$0u1
 
1.Ein etwas vollstaendigerer Quellcode waere sehr hilfreich.
2. Bewundere meine Hellseherischen Faehigkeiten:

Also:
Wenn du Instanzen von den Verschiedenen Klassen erstellst dann kann die Methode ruhig mehrmals vergeben sein das macht dann nichts da sie ja immer noch durch die Instanzen auseinander gehalten werden koennen.

Falls du dich auf die Klasse beziehst:
'Wiso willst du die gleiche Klasse 2 mal schreiben, das geht sogar ohne eine OO-orientierte Sprache einfacher.
Erstelle einfach eine neue Instanz und gut ist.
Falls ich den Nagel immer noch nicht auf den Kopf getroffen habe dann scroggle doch mal nach virtuellen Methoden oder nach abstrackten Klassen, aber achtung:
Anders als in Java erfolgt die Unterscheidung ziwschen diesen beiden Dingen etwas anders.
mfg

sw33t
 
ich glaub, du hasts bissl falsch verstanden:
ich will die Klasse nicht 2x schreiben, sondern 2x benutzen, wenn ich aber dann den Header in beide Dateien include (beide in einem Projekt, sry, habs vergessen), und das #ifndef-Gedingse weglasse, kommt ein Neudefinitions-Linker-Error, wenns ich drinlasse, kennt er in der 2. Quelldatei (hier c.cpp) die Klasse nicht.
 
hm...
wenn du den Header in die main datei des Projektes einbindest und in den beiden anderen dateien an den entsprechenden stellen darauf verweist?
So genau weiß ich es auch nicht, is nur sone geistesblitz idee.


Gruß, D31~$0u1
 
naja, dass du dann die "main" hauptfunktion aufrufst... oder du schreibst ne passende funktion... wie gesagt... nur son geistesblitz... toal unausgearbeitet sry.


lass mich mal die nacht drüber schlafen vllt weiß ich morgen mehr.
 
ähm, eine frage...

1. ist das dein ernst, dass du in b.cpp und c.cpp einfach irgendwelche anweisungen außerhalb von funktionen machst, also auf globalem scope?

2. mehr quellcode :)
 
a.h
Code:
#ifndef A_H
#define A_H
class A {
};
#endif
a.cpp
Code:
include "a.h"

....


b.h
Code:
#ifndef B_H
#define B_H

#include "a.h"

class B {
};
#endif
b.cpp
Code:
include "b.h"

....



c.h
Code:
#ifndef C_H
#define C_H

#include "a.h"

class C {
};
#endif
c.cpp
Code:
include "c.h"

....

main.cpp
[/CODE]
c.cpp
Code:
include "c.h"
C *test = new C;
test->letzRock();
 
also ich werde Später den Quelltext hier Posten mit möglichst exakter Fehlerbeschreibung, leider habe ich aber grade keinen Zugriff drauf

EDIT

hmm, das Problem hat sich soeben erledigt, ich habe einfach ein paar Memberfunktionen vertauscht, jetz gibts keine Fehler mehr. Sollte ich dennoch wieder ein Problem dieser Art haben, melde ich mich wieder.
 
Zurück
Oben