【问题标题】: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; 不能在没有看到完整的类定义的情况下完成。将该代码移动到单独的实现文件中。

标签: c++ qt


【解决方案1】:

前向声明是一个不完整的定义。您要么需要将 Window 的完整定义移到使用它的代码上方,要么需要将其移至单独的头文件并包含它 (#include "Window.h")

【讨论】:

  • 好的,它修复了它,但现在出现了新的错误。候选人需要 2 个参数,1 个在 render 方法中提供。编译器不知道默认参数指针?如果将第二个参数与 nullptr。编译成功。
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 2012-06-28
  • 2014-02-02
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多