繁体   English   中英

使用extern时未定义的引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM