戻り型と同じ名前のメンバー関数を作成したい。例:
class A { };
class B {
public:
A& A() { return *a; }
private:
A* a;
};
ただし、コンパイラは私を許可しません。メンバーの戻りタイプのタイプをに変更しようとしました::A
(ここで推測されていますが、役に立ちません。メンバー名を変更するだけでよいことはわかっていますが、なぜこの制限があるのか、および回避策は何ですか? 。
呼び出されたメンバーを宣言すると、明示的な名前空間A
がないとタイプを使用できなくなります。A
タイプAのすべての出現箇所をに変更する必要があります::A
。
修正されたコードは次のようになります。
class A { };
class B {
public:
::A& A() { return *a; }
private:
::A* a;
};
これは、クラスと同じ名前のメンバーがコンストラクターであるためです。ただし、型を使用して宣言しようとすると、エラーになります。コンストラクターは、言語が望む方法でのみ定義できます(明示的な戻り型はありません)。
たとえば、あなたがその中でメソッドを持っていたB
場合
A x = A();
B::A()
新しいAオブジェクトを呼び出しているのか、構築しているのかはあいまいです。