Ist der folgende Code legal C++ oder nicht?Deklarieren, aber nicht definieren innere Struktur/Klasse - legal C++ oder nicht?
class Foo
{
class Bar;
void HaveADrink(Bar &bar);
void PayForDrinks(Bar &bar);
public:
void VisitABar(int drinks);
};
class Foo::Bar
{
public:
int countDrinks;
};
void Foo::HaveADrink(Bar &bar)
{
bar.countDrinks++;
}
void Foo::PayForDrinks(Bar &bar)
{
bar.countDrinks = 0;
}
void Foo::VisitABar(int drinks)
{
Bar bar;
for (int i=0; i<drinks; i++) HaveADrink(bar);
PayForDrinks(bar);
}
Sowohl Visual C++ und GCC akzeptiert, jedoch scheint der Code etwas seltsam für mich, und ich würde es hassen, es von einem zukünftigen Compiler verweigert zu haben.
Noch scheint das Muster nützlich zu sein, um Kompilierungszeitabhängigkeiten zu reduzieren - ich benutze es häufig, um Strukturen zu deklarieren, die verwendet werden, um einige "Kontext" (ein Bündel von Variablen) zu übergeben, die zwischen einigen wenigen Funktionen geteilt werden in der gleichen CPP-Datei, und auf diese Weise muss ich nicht die "Kontext" -Definition in die öffentliche Schnittstelle einführen.
Ich bin gerade dabei, ein paar Kontext-Klassen zu erstellen, also bin ich auch interessiert. BTW, machen Sie countDrinks öffentlich zugänglich. – stefaanv
Habe ich recht, wenn ich annehme, dass Sie sich auf die 'class Foo :: Bar' Definition beziehen? – MSalters