gpt4 book ai didi

c++ - 可以将指向容器中子类的指针存储到基类吗

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:58 26 4
gpt4 key购买 nike

我有一个容器:

QSet < QDialog*> dialogs_;  

而且我有几个从 QDialog 继承的对话框,例如:

class _1_Dialog : public QDialog, private Ui::_1_Dialog
{};
class _2_Dialog : public QDialog, private Ui::_1_Dialog
{};

并且我想在我的“dialogs_”成员变量中存储指向这些对话框的指针。但现在我收到错误:

error: invalid conversion from 'QDialog*' to '_1_Dialog*' [-fpermissive]  

在那种情况下可以使用 -fpermissive 还是一个坏主意?
编辑:
我有一个名为 create_ 的 fnc,在它的主体内部我有一个声明:

    template<class Dialog,class Caller, class Parent>
Dialog* Main_Dialog::create_(Caller* caller, Parent* parent)
{
return (*dialogs_->insert(new Dialog(caller,parent)));
}

这是一行
这给了我上述错误

最佳答案

可以将指向派生类的指针存储在包含基类的容器中。但是,您从中得到的是指向基类的指针。然后,通常,您要么只使用基类方法,要么使用 dynamic_cast 来检查它的实际类型。

template<class Dialog,class Caller, class Parent>
Dialog* Main_Dialog::create_(Caller* caller, Parent* parent)
{
return (*dialogs_->insert(new Dialog(caller,parent)));
}

*dialogs_->insert() 是指向基类的指针。 知道它总是指向一个 Dialog 类,但编译器不知道,因为您从未告诉过它。试试这个:

template<class Dialog,class Caller, class Parent>
Dialog* Main_Dialog::create_(Caller* caller, Parent* parent)
{
Dialog* result = new Dialog(caller,parent);
dialogs_->insert(result);
return result;
}

关于c++ - 可以将指向容器中子类的指针存储到基类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543752/

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