Basisklasse, 2 Klassen in einer Datei definieren

Jejune

Grünschnabel
Hallo , habe gleich 2 Fragen:



Frage 1:

gibt es für C++ so eine Art Basisklasse, von der alles Abgeleitet wird, also die ich quasi überall hinschreiben könnte

also so wie in Java (Object)







Frage 2 :

ich will in einer Header Datei 2 Klassen definieren
aber das Problem ist folgendes, Klasse 1 arbeitet mit Klasse 2 und Klasse 2 mit Klasse 1
und immer die Klasse die ich zuerst definiere hat Probleme die andere zu erkenne also Bsp:

class Haus {
public:

Stein st1;
Stein st2;
Stein st3;

}


class Stein{
public:
Haus h1;
Haush2;

}

Problem ist dann bei der Klasse Haus gibt es einen Fehler, weil er Stein nicht als Klasse erkennt, weil das ja erst später noch definiert wird.

Ja, ich weiß, wenn ich einfach 2 header Dateien mach hätte sich das Problem erledigt....aba vlt weiß ja jmd einen Workaround wie ichs trtotzdem in einer machen kann.


Wäre super wenn mir jmd helfen könnte!

Vielen Dank schon einmal
 
Zu 1) Nein, Gottseidank nicht

Zu 2) Du kommst von Java?
Bei C++ sind das echte Objekte, keine Referenzen/Pointer. Das geht so nicht, auch nicht mit zwei Headern. Überleg mal. Ein Stein hat zwei Häuser(?). Und jedes der beiden Häuser hat wieder 3 Steine. Und jeder der Steine hat wieder zwei Häuser usw. Das geht nicht.

Ich nehme an, du möchtest, dass jeder Stein eine Referenz auf sein Haus hat? In dem Fall bist du vermutlich mit einem Pointer auf das Haus besser bedient. Und Pointer kann man dann auch mit einer Forward-Deklaration bedienen, d.h. die Klasse Haus muss dann nicht vollständig bekannt sein, es genügt dem Compiler, dass er weiss, dass Haus eine Klasse ist:

Code:
// Die Forward-Deklaration von Haus:
class Haus;

class Stein
{
  public:
    Haus*  pHaus1;
    Haus*  pHaus2;

};

class Haus 
{
  public:

    Stein st1;
    Stein st2;
    Stein st3;
};
 
Hallo Endurion,

vielen vielen Dank für deine Antwort.

die Frage 1 hat sich damit erledigt.


bei Frage 2 müsste ich noch einmal genauer nachhacken ( ja ich komme von Java)


habe das Bsp. mit dem Haus/ Stein gemacht, um das ganze einfach darzustellen....aba du hast recht so hatt das keinen SInn ergeben
das eigenliche Problem ist bisschen komplizierter:

class Point;

class Triangle {

public:

typedef boost::shared_ptr<Point> PointPtr;
PointPtr pTrianglePoint1;
PointPtr pTrianglePoint2;
PointPtr pTrianglePoint3;

};


class Point {
public:

typedef boost::shared_ptr<Triangle> TrianglePtr;
list<TrianglePtr> vTriangles;
}


also hab das mit dem Forward definieren gemacht,
habe aba keine Pointer sondern boost pointer
allerdings scheint das mit den boost pointern nicht zu funktionieren
zumindest wenn ich irgendwann später in einer anderen Klasse PointPtr temp =PointPtr(new Point ); mache bricht mein Programm ab.
Während wenn ich TrianglePtr temp =TrianglePtr(new Triangle ); mache es funktioniert.
 
hi,
Problem gelöst,

war eine falsche Vermutung meinerseits,
Programm ist immer ohne Fehlermeldung einfach abgestürzt.

dacht, das könnte an der Forward deklaration liegen



aber war in wirklichkeit ein Namenskonflikt bei der Erstellung des boost Pointers

kaum hab ich den Namen von Point auf TrainglePoint geändert geht es prima

(vlt. wird Point schon irgendwo anders verwendet.......ist ein recht umfangreiches Programm was mit grafischer Datenverarbeitung zu tun hat, an dem mehrere arbeiten, also ist das gut möglich)


Vielen Dank euch für eure Hilfe!
 

Neue Beiträge

Zurück