gpt4 book ai didi

c++ - 返回类型名称与 C++ 中的方法名称冲突

转载 作者:太空狗 更新时间:2023-10-29 19:58:52 31 4
gpt4 key购买 nike

我正在寻找以下代码无法在 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 请求了更多上下文。我正在使用方法链接来构建 map 对象。为了添加键和值,我可以执行 lMap.Key(1).Value(2).Key(3).Value(4);Key() 创建一个新的 Key 对象,将其添加到映射中,并返回对新键的 Key& 引用。也许我稍后会摆脱显式的 Key 类型,但现在这就是我所拥有的。与 CreateKey() 相比,我喜欢 Key() 的简洁性,而且我认为它在这种情况下的作用非常容易理解。

最佳答案

TypeBInterface 格式错误,但我认为不需要编译器进行诊断。问题是它第一次在返回类型中看到 TypeA 时,它会查找它,在类中看不到任何内容,然后找到该类。但是,C++ 中有一条规则规定,类定义中使用的每个标识符在类定义的末尾仍必须表示相同的内容。但是,如果你在方法声明之后查找TypeA,它会找到方法,而不是类型,所以意思就变了。

TypeB 只是无效的。当它在返回类型位置看到 TypeA 时,查找将找到不是类型的函数 TypeBInterface::TypeA

解决方案:不要那样做。

关于c++ - 返回类型名称与 C++ 中的方法名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045363/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com