gpt4 book ai didi

c++ - 动态转换引用和自动

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:34 26 4
gpt4 key购买 nike

我在使用 auto 和 dynamic_cast 时遇到了一个非常奇怪的行为。这是我的类层次结构:

class BaseInterface {
public:
virtual void someMethod()=0;
};

class Derived:public BaseInterface {
public:
virtual void someMethod1()=0;
void someMethod()override;
};

当然还有一些实现所有派生方法的类。

然后是第三个类,如下所示:

class ThirdClass {
public:
void demoMethod(BaseInterface&);
void anotherMethod(Derived&);
};

void ThirdClass::demoMethod(BaseInterface& obj) {
auto buffer=dynamic_cast<Derived&>(obj);
anotherMethod(buffer);
}

当我用 gcc 编译它时,出现“无法分配抽象类型的对象”错误。而当我更换

auto buffer=...

Derived& buffer=...

一切编译正常。为什么会这样? auto 是不是推导出正确的类型还是什么?

我还发现了一个仍然使用自动的肮脏技巧:

void ThirdClass::demoMethod(Base& obj) {
auto buffer=dynamic_cast<Derived*>(&obj);
anotherMethod(*buffer);
}

最佳答案

您正在从 auto 获取 Derived。改用这个:

auto & buffer = dynamic_cast<Derived&>(obj);

关于c++ - 动态转换引用和自动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628366/

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