不完整类型的无效使用,前向声明不起作用
Posted
技术标签:
【中文标题】不完整类型的无效使用,前向声明不起作用【英文标题】:invalid use of incomplete type, forward declaration not work 【发布时间】:2021-09-28 15:28:08 【问题描述】:如何解决这种对不完整类型“类窗口”的无效使用?即使使用前向声明仍然错误。我需要在任何地方使用类窗口。原因,渲染窗口将根据情况随机。 Window 类有 render 方法。
#include <QApplication>
#include <QWidget>
class Window;
class MainWindow;
class DashBoardWindow: public QWidget
public:
DashBoardWindow()
this->setWindowTitle("Dashboard");
;
class MainWindow: public QWidget
public:
MainWindow()
this->setWindowTitle("MainWindow");
DashBoardWindow* dash = new DashBoardWindow;
Window* wnd = new Window;
wnd->render(dash, this);
;
class Window
public:
void render(QWidget* widget, QWidget* parent = nullptr)
if(parent == nullptr) widget->show();
else
widget->show();
parent->close();
delete this;
;
int main(int argc, char *argv[])
QApplication app(argc, argv);
MainWindow* mainWnd = new MainWindow;
Window* wnd = new Window;
wnd->render(mainWnd);
return app.exec();
【问题讨论】:
Window* wnd = new Window;
不能在没有看到完整的类定义的情况下完成。将该代码移动到单独的实现文件中。
【参考方案1】:
前向声明是一个不完整的定义。您要么需要将 Window 的完整定义移到使用它的代码上方,要么需要将其移至单独的头文件并包含它 (#include "Window.h"
)
【讨论】:
好的,它修复了它,但现在出现了新的错误。候选人需要 2 个参数,1 个在 render 方法中提供。编译器不知道默认参数指针?如果将第二个参数与 nullptr。编译成功。以上是关于不完整类型的无效使用,前向声明不起作用的主要内容,如果未能解决你的问题,请参考以下文章