我正在寻找解释为什么以下代码无法在 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()
我喜欢与类似 的简洁性CreateKey()
,我认为它在这种情况下的作用是可以理解的。