Я пытаюсь создать глобальную структуру, которая будет видна из любой части исходного кода. Мне это нужно для моего большого проекта Qt, где нужны некоторые глобальные переменные. Вот оно: 3 файла (global.h, dialog.h & main.cpp). Для компиляции я использую Visual Studio (Visual C ++).
global.h
#ifndef GLOBAL_H_
#define GLOBAL_H_
typedef struct TNumber {
int g_nNumber;
} TNum;
TNum Num;
#endif
dialog.h
#ifndef DIALOG_H_
#define DIALOG_H_
#include <iostream>
#include "global.h"
using namespace std;
class ClassB {
public:
ClassB() {};
void showNumber() {
Num.g_nNumber = 82;
cout << "[ClassB][Change Number]: " << Num.g_nNumber << endl;
}
};
#endif
и main.cpp
#include <iostream>
#include "global.h"
#include "dialog.h"
using namespace std;
class ClassA {
public:
ClassA() {
cout << "Hello from class A!\n";
};
void showNumber() {
cout << "[ClassA]: " << Num.g_nNumber << endl;
}
};
int main(int argc, char **argv) {
ClassA ca;
ClassB cb;
ca.showNumber();
cb.showNumber();
ca.showNumber();
cout << "Exit.\n";
return 0;
}
Когда я пытаюсь собрать это небольшое приложение, компиляция работает нормально, но компоновщик возвращает мне ошибку:
1>dialog.obj : error LNK2005: "struct TNumber Num" (?Num@@3UTNumber@@A) already defined in main.obj
Существует ли какое-либо решение?
Спасибо.