gpt4 book ai didi

C++歧义问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:15:46 24 4
gpt4 key购买 nike

让下面的类:

class BaseClass
{
class OnSomeEventListener
{
public:
enum SomeEnum { BLABLA }
virtual void OnSomeEvent( SomeEnum eventData ) = 0;
}
};

class ChildClass :
public BaseClass,
public BaseClass::OnSomeEventListener
{
virtual void OnSomeEvent( BaseClass::OnSomeEventListener::SomeEnum eventData );
}

我的问题是:为什么我需要在方法 virtual void OnSomeEvent( BaseClass: :OnSomeEventListener::SomeEnum 事件数据); ?

如果我不这样做,它会说 OnSomeEventListenerBaseClass::OnSomeEventListenerBaseClass::OnSomeEventListener::OnSomeEventListener 之间不明确>

为什么它认为我引用的是构造函数而不是 OnSomeEventListener 类型?为什么我需要在参数类型前加上 BaseClass:: 因为我已经在 BaseClass 中了?

谢谢。

最佳答案

Why would i need to prefix the argument type with BaseClass:: since I'm already inside BaseClass ?

您在 BaseClass 中,但您OnSomeEventListener 中,因为您继承自两者。

当编译器解析一个名称时,它不会认为“我需要一个类型,这可以是一个枚举吗?”,而是认为“我在这里有一个名称,它会是什么?”。在您的情况下,这可能是两种不同的情况,具体取决于在哪个基类中搜索名称。

关于C++歧义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672216/

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