可以使用前向声明来解决这个问题。在 'globalval.h' 文件中,只需要声明 'MainWindow' 类的存在,而不需要包含 'MainWindow.h' 文件。这样就可以避免循环引用的问题。

示例代码如下:

'mainwindow.h' 文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "globalval.h"

class MainWindow
{
public:
    MainWindow();

    void doSomething();
};

#endif // MAINWINDOW_H

'globalval.h' 文件:

#ifndef GLOBALVAL_H
#define GLOBALVAL_H

class MainWindow; // 前向声明

extern MainWindow *pThis; // 声明全局变量

#endif // GLOBALVAL_H

'mainwindow.cpp' 文件:

#include "mainwindow.h"
#include "globalval.h"

MainWindow::MainWindow()
{
    pThis = this; // 在构造函数中保存实体指针到全局变量中
}

void MainWindow::doSomething()
{
    // ...
}

注意,在 'globalval.h' 文件中,需要使用 'extern' 关键字来声明全局变量,而不是在头文件中定义全局变量。定义全局变量应该放在一个源文件中,例如 'main.cpp' 文件中:

#include "mainwindow.h"
#include "globalval.h"

MainWindow *pThis = nullptr; // 定义全局变量

int main(int argc, char *argv[])
{
    // ...
}
C++ 多文件共享全局变量避免循环引用问题

原文地址: https://www.cveoy.top/t/topic/nuKM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录