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