![](/img/trans.png)
[英]Undefined reference when using extern on a c++ object, but not integral type
[英]undefined reference when using extern
我有以下设置(希望这不是一个例子):
啊
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();
}
现在,当我在B.cpp
使用inst时,我得到undefined reference to inst
。
有关如何解决此问题的任何想法?
我知道这个问题很老,但它对某些人来说仍然有用。
全局变量(这里: MyClass inst
) 不应该是 定义它的编译单元的 extern
(这里: A.cpp
)
实现这一目标的一种方法:
global.h
),并使用这些在* cpp中包含这个头文件。 extern
关键字(例如#ifdef
): global.h看起来像:
#ifdef A_H_
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN MyClass inst;
而阿看起来像:
#ifndef A_H_
#define A_H_
// your header content (without globals)
#endif /* A_H_ */
和A.cpp:
#include "A.h"
#include "global.h" // after A.h inclusion, we need A_H_ definition
希望能帮助到你!
这只是一个例子,可以解决正在发生的事情。 但是,基于上述情况,完全有可能当它遇到失败的行时,编译器不知道MyClass
实际存在什么,因此无法解析MyClassFunc
。
我们需要看看MyClass的定义并知道它的确切位置。
你必须编译上面提到的文件A.cpp as
g++ -c A.cpp
g++ -c B.cpp
然后在创建可执行文件时,您应该按如下方式编写命令:
g++ A.o B.o
从您发布的基本示例代码中我会说您忘记了在B.cpp文件中#include <Bh>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.