次のコードが Windows でコンパイルされない理由の説明を探しています。
class TypeA {};
class TypeBInterface
{
public:
~TypeBInterface() {}
virtual TypeA& TypeA() = 0;
};
class TypeB : public TypeBInterface
{
public:
TypeA& TypeA() { return mTypeA; }
private:
TypeA mTypeA;
};
TypeA
戻り値の型とメソッド名の間には、ある種の名前の衝突がありTypeA
ます。次の戻り値の型は正常に機能します。
::TypeA& TypeA() { return mTypeA; }
この動作の原因となっている C++ の規則がわかりません。簡単な説明をいただけますか?
編集: @BalogPal は、より多くのコンテキストを要求しました。メソッドチェーンを使用してマップオブジェクトを構築しています。キーと値を追加するために、できることはlMap.Key(1).Value(2).Key(3).Value(4);
. Key()
新しいKey
オブジェクトを作成してマップに追加Key&
し、新しいキーへの参照を返します。おそらく、後で明示的な型を取り除くことになるでしょうKey
が、今のところ、それが私が持っているものです。Key()
私はvs のような簡潔さが好きCreateKey()
で、この文脈でそれが何をするかは非常に理解しやすいと思います。