Namespace deklariert in file a, Nutzung in file b
-
b ist ein dem std::vector ähnlicher Datentyp. Das Skelett in a benutzt diesen Datentyp, daher muss a b kennen.
Bisher war es nicht so, dass der Datentyp b das Skelett a kennen musste.
Das enum ist in a definiert, weil es zu a gehört. In dem enum wird festgelegt, wie mit Randzugriffen umgegangen wird. Da für diese Randzugriffe ein extra Array angelegt wurde, hatte der Datentyp damit bisher nichts zu tun. Jetzt soll dieses extra Array aber in den Datentyp "mit rein".
-
[quote="centershock"]
Hier werden die beiden einzelnen Klassen inkludiert:
#include "b.h" #include "a.h"Ich denke, das Problem ist, dass b vor a inkludiert wird. Wenn ich nun daher in b a inkludiere, komme ich ja zu der zyklischen Abhängigkeit.
wieso?
es sieht im letztendlichen file doch so aus:
// #include "b.h" wird zu // #include "a.h" wird zu // definitionen von a // definitionen von b // #include "a.h" wird zu //definitionen von a, aber nicht merh genutzt wegen include guardsdu inkludierst so doch nur a quasi 2mal, aber da du auf jedenfall includeguards verwenden solltest, hast du kein roblem mit multipler definition...
-
Ok, auf dem Genauigkeitsgrad kommen wir nicht weiter, glaub ich...
Macht aber nichts. Was hältst Du davon, das enum in eine dritte Datei c auszulagern und diese ausgehend von a und b zu initialisieren? Da b ja a nicht braucht, sondern nur das enum wäre die zirkuläre Abhängigkeit damit ja perdu.
-
Ok, ich hab den namespace Clamping in eine weitere Datei ausgelagert und diese dann in a und b inkludiert.
Jetzt bekomme ich den Fehler in Klasse b:
error: previous definition of ‘class b’Wo kommt das denn jetzt her?
-
Wenn b a nicht braucht, wieso steht in b.h dann:
template<typename Tin, typename Tout> class a;?
-
centershock schrieb:
Ok, ich hab den namespace Clamping in eine weitere Datei ausgelagert und diese dann in a und b inkludiert.
Jetzt bekomme ich den Fehler in Klasse b:
error: previous definition of ‘class b’Wo kommt das denn jetzt her?
Include-Guards gesetzt?
-
EOutOfResources schrieb:
centershock schrieb:
Ok, ich hab den namespace Clamping in eine weitere Datei ausgelagert und diese dann in a und b inkludiert.
Jetzt bekomme ich den Fehler in Klasse b:
error: previous definition of ‘class b’Wo kommt das denn jetzt her?
Include-Guards gesetzt?
oder wenigstens
#pragma once
-
Skym0sh0 schrieb:
oder wenigstens
#pragma onceLeider nicht Standard. Ich hoffe, sie werden es irgendwann einmal standardisieren.
-
ja, dass es nicht standard ist weiss ich...
mh, ich weiss nicht wieso, aber ich mag pragma once nicht. die normalen include guards per #ifndef und #define sind mir viel lieber...
wobei eigentlich ist so wie in java schöner, aber alles rein subjektive empfindung...
-
Gott sei Dank, es funktioniert endlich!!!
Ich hab die Datei, in die ich den Clamping-namespace ausgelagert hab, nur in class b inkludiert und die Include-Guards gesetzt. Dann hat es funktioniert.
Ich danke euch *vielmals* für eure Hilfe!!
Gruß,
centershock
-
a nutzt das aber auch. Klar nutzt b auch c und daher ist das Inkludieren von b in a für den Moment ausreichend, aber c in a und in b zu inkludieren, sollte nicht zu einem Fehler führen und ist eigentlich auch die sauberere Lösung.
-
Du hast recht, es in beiden Klassen zu inkludieren ist besser.
Hab ich jetzt auch gemacht und führt auch nicht zu einem Fehler!
-
centershock schrieb:
Hab ich jetzt auch gemacht und führt auch nicht zu einem Fehler!
Demzufolge hattest du die Include-Guards vergessen, nicht?
EDIT: Zeitform gefixt
-
Ich hab Include-Guards in beiden Dateien und es führt nicht zu einem Fehler...