Ich versuche eine Klasse B innerhalb einer Klasse A zu deklarieren und zu verwenden
und definiere B außerhalb A.
Ich weiß, dass dies möglich ist, weil Bjarne Stroustrup
verwendet dies in seinem Buch "Die Programmiersprache C ++"
(Seite 293, zum Beispiel die String- und Srep-Klassen).
Das ist also mein minimaler Code, der Probleme verursacht
%Vor%Dieser Code gibt die folgenden Kompilierungsfehler in g ++:
%Vor% Ich habe versucht, mir die C ++ - FAQ anzuschauen, und der Schluss, den ich bekam, war hier und hier , aber
diese gelten nicht für meine Situation.
Ich lese das hier von hier aus, aber es löst mein Problem nicht.
Gcc und MSVC 2005 geben Compiler-Fehler auf diesem
Definieren Sie den Konstruktor für A NACH der Definition von Struktur B.
Der Ausdruck c->i
dereferenziert den Zeiger auf struct A::B
, so dass an diesem Punkt im Programm eine vollständige Definition sichtbar sein muss.
Die einfachste Lösung besteht darin, den Konstruktor von A
nichtlinear zu machen und nach der Definition von struct A::B
einen Rumpf dafür anzugeben.
Interessanterweise habe ich dasselbe Problem mit der Seite 293 ('11 .12 A String Class '), die im Stroustrup-Buch erwähnt wird, gemacht.
Das im gedruckten Buch angegebene Beispiel scheint fehlerhaft zu sein und bietet die folgenden Methoden als Inline, anstatt sie nach der Definition von struct Srep
zu definieren %Vor%Ich habe ein wenig gegoogelt und die neueste Implementierung der String-Klasse des Autors gefunden, die hier verfügbar ist: Ссылка
Er scheint es so modifiziert zu haben, dass diese Methoden nicht mehr inline sind, um das in diesem Thread erwähnte Problem zu vermeiden.
Tags und Links class c++ nested declaration forward