1

戻り型と同じ名前のメンバー関数を作成したい。例:

class A { };

class B {
public:
    A& A() { return *a; }
private:
    A* a;
};

ただし、コンパイラは私を許可しません。メンバーの戻りタイプのタイプをに変更しようとしました::Aここで推測されていますが、役に立ちません。メンバー名を変更するだけでよいことはわかっていますが、なぜこの制限があるのか​​、および回避策は何ですか? 。

4

2 に答える 2

2

呼び出されたメンバーを宣言すると、明示的な名前空間Aがないとタイプを使用できなくなります。AタイプAのすべての出現箇所をに変更する必要があります::A

修正されたコードは次のようになります。

class A { };

class B {
    public:
        ::A& A() { return *a; }
    private:
        ::A* a;
};

コードパッドの修正されたコード:

http://codepad.org/cilF9rKm

于 2013-02-02T17:40:05.517 に答える
0

これは、クラスと同じ名前のメンバーがコンストラクターであるためです。ただし、型を使用して宣言しようとすると、エラーになります。コンストラクターは、言語が望む方法でのみ定義できます(明示的な戻り型はありません)。

たとえば、あなたがその中でメソッドを持っていたB場合

A x = A();

B::A()新しいAオブジェクトを呼び出しているのか、構築しているのかはあいまいです。

于 2013-02-02T17:35:12.200 に答える