Namespace deklariert in file a, Nutzung in file b
-
[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...