Bare with me :/
I have two class definitions in file MyClass.h:
Code:
#define MYCLASS_H
class MyClass
{
int i;
public:
MyClass(int n):i(n){}
int GetI(void){return i;}
};
class MyClass2
{
float x;
public:
MyClass2(float n):x(n){}
float GetX(void){return x;}
void DoStuffToX(void);
};
I then have a file named globals.h with a global object of type MyClass in a namespace:
Code:
#define GLOBALS_H
#ifndef MYCLASS_H
#include "myClass.h"
#endif
namespace my_name
{
MyClass myObject(234);
}
I then have a file called MyMain.cpp which includes both header files and refers to my global MyClass object:
Code:
#include <iostream>
#ifndef GLOBALS_H
#include "globals.h"
#endif
#ifndef MYCLASS_H
#include "myClass.h"
#endif
int main()
{
cout << my_name::myObject.GetI();
cin.get();
return 0;
}
Now, at this point in the operation everything compiles and works fine; we have an output on the screen of "234". Hoorah. The error occurrs when I try adding another file wanting to include globals.h. This one is called MyClass2.cpp:
Code:
#ifndef MYCLASS_H
#include "myClass.h"
#endif
#ifndef GLOBALS_H
#include "globals.h"
#endif
void MyClass2::DoStuffToX()
{
x *= static_cast<float>(my_name::myObject.GetI());
}
I try to compile this (all four files) and I get the following linker errors:
d:/dom/my documents/developing tools/temp programming/globalobjects/myclass2.o: In function `MyClass2:
oStuffToX(void)':
//d/dom/my documents/developing tools/temp programming/globalobjects/myclass2.cpp:9: multiple definition of `my_name::myObject'
d:/dom/my documents/developing tools/temp programming/globalobjects/mymain.o(.bss+0x0)://D/DEV-C_~1/Include/G__~1/streambuf.h: first defined here
This is of course a simplified version of a much more complicated program, where I would really like to be able to have a global variable that can be included by more than one file. Any light on this would be much appreciated.
dt