Ich laufe wirklich in der fehlenden Wort zu sagen für beide Seiten enthalten, aber bedenken Sie:Wie deklariert man zwei gegenseitig (zirkulär-abhängige) Klasse in C++ mit Trennung?
struct A;
struct C;
struct A {
struct B{
};
C* c;
};
struct C{
A::B* b;
};
Ganz konfus aber einen Sinn und compiliert macht.
Aber wenn A und C größere und komplexere Klassen sind, ist es natürlich, sie auf zwei Dateipaare zu trennen. Dann schreibe ich:
//a.h
#pragma once
#include "c.h"
struct A{
struct B{
};
C* c;
};
//c.h
#pragma once
#include "a.h"
struct C{
A::B* b;
};
mit ihren entsprechenden .cpp-Dateien. Das wird definitiv nicht funktionieren. Also frage ich mich, ob es eine Möglichkeit gibt, struct A
und C
zu trennen (oder besser, wenn keine Anforderung für die endgültige Verwendung)?
Nur vorwärts deklarieren C in a.h? Forward-Deklaration von A :: B ist nicht möglich, also verschiebe B aus A – paulm
Forward-Deklaration vor oder nach '# include'? Keine Möglichkeit, B in A zu erhalten? – YiFei
Nein, ich glaube nicht, das ist in der Lage – paulm