ich den folgenden Code wurde kompiliert:Unvollständige Art in verschachtelten name-Bezeichner namens
class B;
class A {
A();
friend A B::newAObject();
};
class B {
friend A::A();
public:
A newAObject();
};
Das mag seltsam erscheinen, aber die Idee war, eine Klasse zu haben A
, die nur durch ein Objekt vom Typ hergestellt werden könnte B
(wer wäre wahrscheinlich ein Singleton).
Das Problem ist, dass ich eine zirkuläre Abhängigkeit zwischen diesen Objekten erstellt habe. A
muss vor B
definiert sein, und B
muss vor A
definiert werden. Offensichtlich vorwärts zu deklarieren B
ist nicht gut genug, B
muss tatsächlich vor A
(und umgekehrt) vollständig definiert werden.
Wie kann ich das umgehen?
Edit: der eigentliche Fehler ist: Unvollständige Typ 'B' in geschachtelten Namen Spezifizierer benannt.
Hinweis: Es gibt einen anderen Beitrag, der dem hier ähnlich ist: Error: incomplete type used in nested name specifier, aber es ist stark templatiziert und das hat mich verwirrt, daher dieser Beitrag.
Es ist ein wenig seltsam, eine einzige Methode zu einem Freund zu machen. Bist du sicher, dass du nicht die ganze Klasse zu einem Freund machen willst? –
Mir war nicht bewusst, dass das möglich war. Wie wird es gemacht? schreibe ich 'Freundklasse B' innerhalb von' A' und 'Freundklasse A' in' B'? – anthropomorphic
Das stimmt ... –