I have the following setup (hopefully this is not too bare an example):
Ah
typedef std::map<unsigned int, float> MyClass;
extern MyClass inst;
A.cpp
MyClass inst;
Bh
#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 (eg with #ifdef
) : global.h looks like:
#ifdef A_H_
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN MyClass inst;
while Ah 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!
This is too bare an example to work out what's going on. However, based on the above it's entirely possible that when it hits the failing line the compiler has no knowledge of what's actually in MyClass
and therefore cannot resolve MyClassFunc
.
We would need to see the definition of MyClass and know where it is to answer for sure.
You have to compile the above mentioned file A.cpp as
g++ -c A.cpp
g++ -c B.cpp
and then while creating the executable you should write the command as follows:
g++ A.o B.o
从您发布的基本示例代码中我会说您忘记了在B.cpp文件中#include <Bh>
。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.