と宣言してグローバルスコープの競合における変数の宣言は、私はXCodeのとC++ 11サポートのコンパイラを使用してInDesignの新しいバージョン用にコンパイルしようとしていますInDesignのプラグインのいくつかのレガシーコードを持っています。C++:C言語リンケージ
以下のようにC結合を持つクラスオブジェクトを含むヘッダファイルAdWrksSession.h
があります。 extern
オブジェクト/変数の宣言が進むにつれ:古いコンパイラを
CAdWrksSession gAdWrksSession;
:
extern "C" CAdWrksSession gAdWrksSession;
をし、CPPファイルAdWrksSession.cpp
はextern
オブジェクトと同じ名前のデフォルトのコンストラクタを持つグローバルクラスオブジェクトが含まれていますこのため、すべてのエラーメッセージを示したが、それは私に次のエラーを示してC++ 11のサポートとXCodeの7.2.1のためにアップルが提供する新しいコンパイラでそれを使用するときにされませんでした。
header
ファイル内でextern変数の宣言については、以下の構文を試してみました
What is "extern linkage and with C language linkage"
Mixing declarations with extern, static and no storage specifier in global scope
:私は次のように既にC
連携のための質問をしようとしている3210 Declaration of 'gAdWrksSession' in global scope conflicts with declaration with C language linkage
#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
が、何もこれまで働いていません。当然の
私はstatic
static CAdWrksSession gAdWrksSession; //Header File
としてheader
ファイル宣言を行うと、その後のコードは正常にビルドが、機能が動作しません。
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言語で 'class'をC言語で使うことはできないと思っています。C言語では、C++モジュールをインターフェースで使うことができます。 http://stackoverflow.com/questions/11971063/how-to-use-c-objects-in-c – d0mbn00b
「extern」C「CAdWrksSession gAdWrksSession;」はどのようにしてクラス型で動作しますか? –