Я пытаюсь создать класс с двумя методами с одинаковыми именами, которые используются для доступа к приватному члену. Один метод является общедоступным и квалифицированным const, другой - закрытым и неконстантным (используется классом-другом для изменения члена посредством возврата по ссылке).
К сожалению, я получаю ошибки компиляции (с использованием g ++ 4.3): при использовании неконстантного объекта для вызова метода g ++ жалуется, что неконстантная версия моего метода является закрытой, даже если публичная (const) версия существует.
Это кажется странным, потому что если частная неконстантная версия не существует, все компилируется нормально.
Есть ли способ заставить эту работу?
Компилируется ли он на других компиляторах?
Спасибо.
Пример:
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() */
}