在多个.cpp文件中定义的同名全局const变量将导致重复定义错误
时间: 2024-03-29 13:35:48 浏览: 244
是的,如果多个.cpp文件中定义了同名的全局const变量,编译器将会报重复定义错误。这是因为const变量默认情况下是具有内部链接的,也就是说每个.cpp文件中都会创建一个独立的实例。如果需要在多个.cpp文件中共享同一变量,可以将const变量声明为extern类型,在一个.cpp文件中进行定义,在其他文件中进行声明即可。
相关问题
QT中多个文件如何设置可共享全局变量
在QT中实现多个文件共享全局变量可以通过以下两种方式:
1. 使用extern关键字
在一个文件中定义全局变量,然后在其他文件中使用extern关键字声明同名变量即可。这样就可以在多个文件中使用同一变量。
例如,在文件A.cpp中定义一个全局变量:
```
int globalVar = 0;
```
然后在文件B.cpp中使用extern关键字声明同名变量:
```
extern int globalVar;
```
这样就可以在文件B.cpp中使用globalVar变量了。
2. 使用全局变量类
QT中提供了一个Q_GLOBAL_STATIC宏,可以方便地实现在多个文件中共享全局变量。该宏可以将一个全局变量包装在一个类中,并且该类的实例只会在第一次使用时被创建。
例如,在头文件Global.h中定义一个全局变量类:
```c++
#ifndef GLOBAL_H
#define GLOBAL_H
#include <QtCore/QObject>
#include <QtCore/QMutex>
class Global : public QObject
{
Q_OBJECT
public:
explicit Global(QObject *parent = nullptr);
int globalVar() const;
void setGlobalVar(int value);
private:
QMutex mutex;
int m_globalVar;
};
Q_GLOBAL_STATIC(Global, globalInstance)
#endif // GLOBAL_H
```
然后在Global.cpp文件中实现该类的方法:
```c++
#include "Global.h"
Global::Global(QObject *parent)
: QObject(parent)
, m_globalVar(0)
{
}
int Global::globalVar() const
{
QMutexLocker locker(&mutex);
return m_globalVar;
}
void Global::setGlobalVar(int value)
{
QMutexLocker locker(&mutex);
m_globalVar = value;
}
```
这样就可以在多个文件中使用该全局变量了:
```c++
#include "Global.h"
void foo()
{
globalInstance->setGlobalVar(42);
}
void bar()
{
int value = globalInstance->globalVar();
}
```
需要注意的是,在使用Q_GLOBAL_STATIC宏时,必须将全局变量类的头文件包含在所有使用该变量的文件中。
阅读全文