C++ Geschachtelte Klassen vorwärts-Deklaration Fehler
Ich versuche zu erklären, und verwenden Sie eine Klasse B innerhalb einer Klasse Ein
und definieren B außerhalb A.
Ich weiß, für eine Tatsache, dass dies möglich ist, da Bjarne Stroustrup
nutzt dies in seinem Buch "Die C++ Programmiersprache"
(Seite 293,zum Beispiel die String-und Srep-Klassen).
Also das ist mein minimal-code, der Probleme bereitet,
class A{
struct B; //forward declaration
B* c;
A() { c->i; }
};
struct A::B {
/*
* we define struct B like this becuase it
* was first declared in the namespace A
*/
int i;
};
int main() {
}
Dieser code gibt die folgende Zusammenstellung von Fehlern, die in g++ :
tst.cpp: In constructor ‘A::A()’:
tst.cpp:5: error: invalid use of undefined type ‘struct A::B’
tst.cpp:3: error: forward declaration of ‘struct A::B’
Ich habe versucht, um sich an der C++ - Faq und die closeset ich bekam, war hier und hier aber
diejenigen, die nicht relevant für meine situation.
Ich habe auch Lesen Sie diese von hier, aber es ist nicht die Lösung meines Problems.
Beide gcc und MSVC 2005 geben, compiler-Fehler, die auf dieser
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definieren Sie den Konstruktor für EIN NACH der definition von struct B.
Den Ausdruck
c->i
dereferenziert den Zeiger aufstruct A::B
also eine vollständige definition muss sichtbar sein, an diesem Punkt in dem Programm.Die einfachste Lösung ist, um den Konstruktor der
A
non-inline und bieten eine Stelle für es nach der defintion vonstruct A::B
.inline
Schlüsselwort nach der definition von struct B.Dies ist ein gutes Beispiel dafür, warum Sie wollen zu halten-Definitionen getrennt von Erklärungen. Müssen Sie ändern die Ordnung der Dinge so, dass der Konstruktor
A::A()
definiert ist, nach der definition vonstruct A::B
.Interessanterweise hab ich stieß in das gleiche problem mit der Seite 293 ('11.12 Eine String-Klasse') erwähnt in der Stroustrup Buch.
Dem Beispiel im Buch scheint ein Fehler bei Angabe der folgenden Methoden als inline -, statt die Definition nach der definition von struct Srep
Ich ein wenig gegoogelt, und fand der Autor die neueste Umsetzung dieses String-Klasse finden Sie hier:
http://www2.research.att.com/~bs/string_example.c
Scheint er zu haben, so bearbeitet, dass diese Methoden nicht mehr inline, das problem zu vermeiden, erwähnt in diesem thread.