プライベートメンバーにアクセスするために使用される、同じ名前の2つのメソッドを持つクラスを作成しようとしています。1つのメソッドはpublicでconst修飾されており、もう1つはprivateでnon-constです(参照による戻りによってメンバーを変更するためにフレンドクラスによって使用されます)。
残念ながら、コンパイルエラーが発生します(g ++ 4.3を使用):非constオブジェクトを使用してメソッドを呼び出すと、パブリック(const)バージョンが存在していても、g++はメソッドの非constバージョンがプライベートであると文句を言います。
プライベートの非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() */
}