Есть .h-файл с глобальными переменными. Разные переменные оттуда должны использоваться в разных .cpp-файлах в проекте (подразумевается, что в этом .h-файле будут лежать все строковые константы проекта). В общем случае ситуацию можно описать так:
[ main.cpp ]
#include "header.h"
#include "glib/gprintf.h"
int main()
{
g_printf("%d %d", Func1(), Func2());
}
[ header.h ]
#ifndef HEADER_H_
#define HEADER_H_
int Func1();
int Func2();
#endif
[ first.cpp ]
#include "header.h"
#include "additional.h"
int Func1()
{
return Variable1;
}
[ second.cpp ]
#include "header.h"
#include "additional.h"
int Func2()
{
return Variable2;
}
[ additional.h ]
#ifndef SECOND_H_
#define SECOND_H_
int Variable1;
int Variable2;
#endif
Код нормально компилируется, но на этапе линковки возникает ошибка:
G:/Projects/Temp/Debug/../first.cpp:5: multiple definition of `Variable1' second.o:G:/Projects/Temp/Debug/../second.cpp:5: first defined here first.o: In function `Z5Func1v': G:/Projects/Temp/Debug/../first.cpp:6: multiple definition of `Variable2' second.o:G:/Projects/Temp/Debug/../second.cpp:6: first defined here collect2: ld returned 1 exit status Build error occurred, build is stopped
Как избежать этого? Ещё - эти глобальные переменные должны обязательно задаваться как переменные, а не через #define.