C++ 多文件共享全局变量避免循环引用问题
可以使用前向声明来解决这个问题。在 '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[])
{
// ...
}
原文地址: https://www.cveoy.top/t/topic/nuKM 著作权归作者所有。请勿转载和采集!