我有一些InDesign插件的遺留代碼,我正在嘗試爲使用C++ 11支持的XCode編譯器的InDesign新版本進行編譯。C++:全局範圍變量的聲明與聲明與C語言鏈接衝突
有一個頭文件AdWrksSession.h
,其中包含一個具有C鏈接的類對象,如下所示。 作爲extern
對象/變量的聲明所說:
extern "C" CAdWrksSession gAdWrksSession;
和cpp文件AdWrksSession.cpp
包含具有相同名稱的默認構造爲extern
對象全局類對象:
CAdWrksSession gAdWrksSession;
的舊的編譯沒有顯示任何錯誤消息,但是當它與Apple提供的XCode 7.2.1的新編譯器一起使用並支持C++ 11時,它向我顯示以下錯誤:
Declaration of 'gAdWrksSession' in global scope conflicts with declaration with C language linkage
我曾嘗試已經在關注問的問題,爲C
聯動:
What is "extern linkage and with C language linkage"
Mixing declarations with extern, static and no storage specifier in global scope
我嘗試了外部變量聲明如下語法在header
文件:
#ifdef __cplusplus
extern "C" {
#endif
CAdWrksSession gAdWrksSession;
#ifdef __cplusplus
}
#endif
和
#ifdef COMPILE_FOR_C_LINKAGE
extern "C" CAdWrksSession gAdWrksSession;
#else
extern "C++" CAdWrksSession gAdWrksSession;
#endif
,但沒有奏效。
當我做了header
文件中的聲明爲static
static CAdWrksSession gAdWrksSession; //Header File
那麼代碼成功生成,但功能不工作,當然。
UPDATE: 如果我刪除C鏈接,然後我得到一個鏈接錯誤如下:
Undefined symbols for architecture x86_64:
"smart::gAdWrksSession", referenced from:
....//Names of generated object files
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1
(use -v to see invocation)`
誰能幫助我在這裏?謝謝。
你如何在c中使用C++類?只是好奇。 –
我不認爲你可以在C中使用C++類。你可以通過一個接口在C中使用C++模塊。 http://stackoverflow.com/questions/11971063/how-to-use-c-objects-in-c – d0mbn00b
那麼如何可以'extern「C」CAdWrksSession gAdWrksSession;'使用類類型? –