尽管有公共继承和公共基类构造函数,派生类无法访问其父类的构造函数

问题描述 投票:0回答:0

我有一个名为“GroupBoxWidget”的基类和两个名为“GroupBoxIn”和“GroupBoxOut”的孩子。他们都尝试使用其父级作为初始化来构建自己。此时 IntelliSense 表示 CGroupBox 的构造函数不可访问。

让我们详细看看,好吗?从父母开始......

GroupBoxWidget.h

#ifndef MY_GROUPBOX_H
#define MY_GROUPBOX_H
#include <QGroupBox>
class CGroupBoxWidget: public QGroupBox
{
public:
    Q_OBJECT
    CGroupBoxWidget(QWidget* pParent = nullptr);
    virtual ~CGroupBoxWidget();
protected:
    //Create Widgets
    virtual QGroupBox *CreateBtnsGroupBox() = 0;
private:

};

#endif // !MY_GROUPBOX_H

如您所见,QGroupBoxWidget 本身派生自 Qt 库中的 QGroupBox。没有任何内容被声明为私有的。纯虚函数“=0”将在孩子中被覆盖。让我们快速浏览一下它在 GroupBoxWidget.cpp 中的构造函数:

//Constructor
CGroupBoxWidget::CGroupBoxWidget(QWidget* pParent) : QGroupBox(pParent)
{
    //Every MainGroupBoxWidget integrates at least two Labels, a ComboBox and a PushButton
}

现在让我们选择一个孩子来检查。看着GroupBoxIn.h

#ifndef GROUPBOXIN_H
#define GROUPBOXIN_H
#include "GroupBoxWidget.h"
class CGroupBoxIn : public CGroupBoxWidget
{
public:
    Q_OBJECT
    CGroupBoxIn(QWidget* pParent = nullptr);
    virtual ~CGroupBoxIn(); 

protected:

    virtual QGroupBox *CreateBtnsGroupBox() override;
    QButtonGroup *m_pButtonGroupIn;

private:

};
#endif // !GROUPBOXIN_H

这里一切都好。纯虚函数覆盖基类中的虚函数。但是当我尝试在GroupBoxIn.cpp中构造它时,我在初始化列表下方通过父类正好在

中得到了一条细红线

CGroupBoxWidgetidget(pParent)

CGroupBoxIn::CGroupBoxIn(QWidget* pParent) : CGroupBoxWidget(pParent)
{   this->setTitle("Input"); }

我想听听您关于此编译器错误从何而来的建议。我正在使用 MSVC 15、Qt 5.8、C++11 和 Windows 11。

c++ qt inheritance visual-studio-2015 intellisense
© www.soinside.com 2019 - 2024. All rights reserved.