不完整类型的无效使用,前向声明不起作用

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。编译成功。

以上是关于不完整类型的无效使用,前向声明不起作用的主要内容,如果未能解决你的问题,请参考以下文章

前向声明 cv::Mat

Discord.js 类型/声明扩展不起作用

用 int 类型声明 lambda 不起作用[关闭]

wps excel VLOOKUP匹配不出来 不起作用 无效 #N/A不显示的解决办法

Facebook 受众出价不起作用:捆绑状态无效

Nginx缓存无效参数不起作用