簡體   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