Ich habe eine Klasse (C) mit einer Memberklasse (B), die eine dritte Klasse (A) verfolgt. Wie lautet die richtige Syntax, um die öffentlichen Funktionen von A über C und B aufzurufen? Oder habe ich meine Zeiger vermasselt?Aufrufen von Elementfunktionen über mehrere Zeiger
#include <iostream>
class A
{
public:
void Hello() const {std::cout<<"World."<<std::endl;};
};
class B
{
const A* aa; // Pointer can change, data cannot.
public:
const A* *const aaa; // Pointer and pointed value are const.
B() : aaa{&aa} {};
void SetPointerToA(const A& aRef) {aa = &aRef;};
};
class C
{
B b;
public:
B* bb; // Provide access to public members of B.
C() : bb{&b} {};
};
int main()
{
A aTop;
C c;
c.bb->SetPointerToA(aTop); // Tell c.b to modify itself. No problems here.
c.bb->aaa->Hello(); // <==== Does not compile.
return 0;
}
gcc 5.2.0 beschwert sich über den Anruf Hallo():
error: request for member 'A:: Hello' in '*(const A**)c.C::bb->B::aaa',
which is of pointer type 'const A*' (maybe you meant to use '->' ?)
@OlegBogdanov 'aa' ist privat. Und 'aaa' ist ein Doppelzeiger. –
'(* (c-> bb-> aaa)) -> Hallo()'. Sie haben das durch Ihre, sagen wir, unkonventionelle Anordnung von Mitgliedern, die Hinweise auf andere Mitglieder sind, auf sich selbst gebracht. –
Warum machen Sie das so kompliziert? Erinnere dich an [KISS] (https://en.wikipedia.org/wiki/KISS_principle) –