Próbuję utworzyć klasę za pomocą dwóch metod o tej samej nazwie, używanych w celu uzyskania dostępu do prywatnego członka. Jedna metoda jest publiczna i jest zakwalifikowana, druga jest prywatna i nie jest const (używana przez klasę znajomego w celu modyfikacji członka poprzez odwołanie do referencji).prywatna niestanowiąca i publiczna funkcja członka wspólnoty - współistniejąca w pokoju?
Niestety, otrzymuję błędy kompilacji (używając g ++ 4.3): Kiedy używam obiektu nie const do wywoływania metody, g ++ narzeka, że niestanowiskowa wersja mojej metody jest prywatna, nawet jeśli publiczna (const) wersja istnieje.
Wydaje się to dziwne, ponieważ jeśli nie istnieje wersja prywatna, która nie istnieje, wszystko kompiluje się dobrze.
Czy istnieje sposób, aby to zadziałało? Czy jest kompilowany na innych kompilatorach?
Dzięki.
Przykład:
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() */
}
Dlaczego to nie? C++ umożliwia konwersję z const const na vis parametr vis. – jkeys