Ich versuche, eine Klasse mit zwei Methoden mit demselben Namen zu erstellen, um auf ein privates Mitglied zuzugreifen. Eine Methode ist public und const qualifiziert, die andere ist privat und nicht-const (wird von einer Freundesklasse verwendet, um das Mitglied über die Rückgabe durch Referenz zu ändern).private non-const und public const Mitglied Funktion - Koexistenz in Frieden?
Leider erhalte ich Kompilierfehler (mit g ++ 4.3): Wenn Sie ein nicht-konstantes Objekt verwenden, um die Methode aufzurufen, beschwert sich g ++, dass die nicht-const Version meiner Methode privat ist, obwohl eine öffentliche (const) Version existiert.
Dies scheint seltsam, denn wenn die private nicht-const-Version nicht existiert, wird alles gut kompiliert.
Gibt es eine Möglichkeit, dies zu funktionieren? Kompiliert es auf anderen Compilern?
Danke.
Beispiel:
class A
{
public:
A(int a = 0) : a_(a) {}
public:
int a() const { return a_; }
private:
int & a() { return a_; } /* Comment this out, everything works fine */
friend class B;
private:
int a_;
};
int main()
{
A a1;
A const a2;
cout << a1.a() << endl; /* not fine: tries to use the non-const (private) version of a() and fails */
cout << a2.a() << endl; /* fine: uses the const version of a() */
}
Warum scheitern würde das? C++ ermöglicht die Konvertierung von nicht-const zu const, vis vis vis Funktionsparameter. – jkeys