Ami*_*hum 5 c++ extern undefined-reference
我有以下设置(希望这不是一个例子):
啊
typedef std::map<unsigned int, float> MyClass;
extern MyClass inst;
Run Code Online (Sandbox Code Playgroud)
A.cpp
MyClass inst;
Run Code Online (Sandbox Code Playgroud)
BH
#include <A.h>
void foo();
Run Code Online (Sandbox Code Playgroud)
B.cpp
#include <B.h>
void foo {
inst.myClassFunc();
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用inst时,B.cpp我得到了undefined reference to inst.
有关如何解决此问题的任何想法?
joh*_*n d 11
我知道这个问题很老,但它对某些人来说仍然有用.
全局变量(此处MyClass inst)不应该 extern 对编译单元,其定义它(这里A.cpp)
实现这一目标的一种方法:
global.h),并使用这些标题在*cpp中包含这个标题.extern的编译单元的关键字(例如with ):#ifdefglobal.h看起来像:
#ifdef A_H_
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN MyClass inst;
Run Code Online (Sandbox Code Playgroud)
而阿看起来像:
#ifndef A_H_
#define A_H_
// your header content (without globals)
#endif /* A_H_ */
Run Code Online (Sandbox Code Playgroud)
和A.cpp:
#include "A.h"
#include "global.h" // after A.h inclusion, we need A_H_ definition
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
这只是一个简单的例子,无法说明发生了什么。然而,基于上述情况,当遇到失败行时,编译器完全有可能不知道实际内容MyClass,因此无法解析MyClassFunc.
我们需要查看 MyClass 的定义并知道它在哪里可以确定答案。