4

C++ ライブラリによって提供される機能を使用する Objective-C/C++ アプリケーションがあります。

C++ クラスの 1 つに、次のような列挙型が含まれています。

class TheClass
{
public:
[...]

enum TheEnum
{
    YES,
    NO,
};

[...]
};

上記のクラス宣言を含むヘッダー ファイルを Objective-C/C++ ソース ファイル (*.mm) に (#import -if that matter- を使用して) インクルードすると、プリプロセッサが "YES" を " という用語に置き換えるため、コンパイルが失敗します。 (BOOL) 1" (および同様に "(BOOL) 0" による "NO")。

列挙型の値の名前を変更せずにそれを修正する方法はありますか?

4

2 に答える 2

5

YES と NO は、objc.h ヘッダーで宣言された、Objective-C の定義済み定数です。

プリプロセッサが「YES」および「NO」マクロを展開するのを防ぐことができるはずです。これは、ローカルで#undeffingすることで実行できます。

しかし技術的には、言語キーワードを識別子として使用している場合、問題が発生することが予想されます。というメンバーを含むクラスを作成することはありませんMAX_PATHね。

于 2009-08-10T12:26:45.747 に答える
-1

重要なの#importは、Objective-C++ ソース ファイル内の C++ ヘッダーを に含める必要があること#includeです。100% 確実ではありませんが、インクルード ディレクティブ ( #includevs #import) の選択によって、使用されるプリプロセッサが決まると思います。

デフォルトでは、列挙型のメンバーは 0 から始まる整数に関連付けられているため、列挙型の定数の宣言を逆にすることもできます。

コメントごとに、私は間違っています。列挙型を書き直す必要があるようです。ごめん :(

于 2009-08-10T11:49:15.960 に答える