I have the following setup (hopefully this is not too bare an example):
A.h
typedef std::map<unsigned int, float> MyClass;
extern MyClass inst;
A.cpp
MyClass inst;
B.h
#include <A.h>
void foo();
B.cpp
#include <B.h>
void foo {
inst.myClassFunc();
}
Now, when I use inst in B.cpp
I get undefined reference to inst
.
Any idea on how to fix this?
I know this question is old, but it still might be helpful for someone.
The global variable (here: MyClass inst
) should not be extern
for the compilation unit which define it (here: A.cpp
)
One way to achieve this:
global.h
) and include this header in the *cpp using these.extern
keyword for the compilation unit which define them (e.g. with #ifdef
) :global.h looks like:
#ifdef A_H_
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN MyClass inst;
while A.h looks like:
#ifndef A_H_
#define A_H_
// your header content (without globals)
#endif /* A_H_ */
and A.cpp:
#include "A.h"
#include "global.h" // after A.h inclusion, we need A_H_ definition
Hope it helps!