Objective-CおよびC ++コードの混在
-
12-09-2019 - |
質問
私はC ++ライブラリで提供される機能を使用してのObjective-C / C ++アプリケーションを持っています。
C ++のクラスの一つは、このような列挙型が含まれます:
class TheClass
{
public:
[...]
enum TheEnum
{
YES,
NO,
};
[...]
};
(使用して、そのmatters- -ifの#import)のObjective-C / C ++ソース・ファイル(* .mm)中の上記のクラス宣言を持つヘッダファイルを含むプリプロセッサにより「YES」置き換えるので、コンパイルが失敗になります用語 "(BOOL)1"(同様に "NO" による "(BOOL)0")。
列挙型の値の名前を変更することなく、これを修正する方法はありますか?
解決
YESとNO定義済みの定数はでをさobjc.hヘッダ内で宣言目的-C、
あなたは「YES」と「NO」のマクロのを展開するプリプロセッサを防ぐことができるはずです。これは、ローカル #undef
fing にそれらによって行うことができます。
しかし、技術的に、あなたはトラブルを期待することができます。あなたはあなたでしょう、MAX_PATH
と呼ばれるメンバーを含むクラスを作成していないのだろうか?
他のヒント
<ストライキ>は#import
は問題ありません - C ++ヘッダのObjective-C ++のソースファイルには#include
に含まれるべきです。選択は指令(#include
対#import
)が使用されるプリプロセッサを決定含まれていることを、100%わからないけれども、私は、と思います。ストライキ>
<ストライキ>デフォルトでは、列挙型のメンバーは0から始まる整数に関連付けられているので、あなたはまた、列挙型の定数の宣言を逆転させることができます。ストライキ>
コメントパー、私は間違っています。あなたが列挙型を書き換える必要がありますように見えます。申し訳ありません:(