0

私は C++ が初めてで、以下の簡単な問題に直面しています。Visual C++ 2008 では、次のようなものを #define しようとしています

#define fromThis*  toThisPtr
#define fromThis   toThisObj

Linux で記述されたコードを移植しており、winapi に従って移植する必要があります。このようなエラーが発生しています。

 error C2008: '*' : unexpected in macro definition
 warning C4005: 'fromThis' : macro redefinition
 see previous definition of 'fromThis'

前処理時に fromThis* と fromThis を再定義する必要があります。#define マクロで特殊文字は使用できませんか? このコードを解決するにはどうすればよいですか?


EDIT-1:これに対する可能な解決策を探しています。*fromThis を 'toThisPtr' に置き換えようとしています。推奨される解決策の 1 つは、typedef の使用です。私は以下のようにしました。

typedef toThisPtr   fromThis*;
typedef toThisObj   fromThis;

今、この解決策で私が得ているエラーはこれです:

エラー C2143: 構文エラー: ';' がありません '*' エラー C2059 の前: 構文エラー: ';' エラー C2040: 'iovec': 'toThisObj' は、'toThisPtr' とは間接性のレベルが異なります

typedef がこの問題の解決策になる可能性があります。fromThis* を toThisPtr に変更する標準的な方法は何ですか?

4

4 に答える 4

3

ドキュメント#defineよると、最初の引数は識別子です。識別子には文字、数字、およびアンダースコアのみを含めることができ、数字で始めることはできません。

したがって、fromThis*有効な識別子ではなく、他のものにすることはできませ#defineん。

于 2012-07-30T05:59:37.027 に答える
0

名前に * は使用できません。ドキュメントからの抜粋を参照してください。

C キーワードであっても、任意の有効な識別子をマクロとして定義できます。

有効な識別子は、1 つ以上の文字、数字、またはアンダースコア文字 (_) のシーケンスです。スペースも句読点も記号も、識別子の一部にすることはできません。文字、数字、および単一のアンダースコア文字のみが有効です。さらに、変数識別子は常に文字で始まる必要があります。

于 2012-07-30T06:08:47.367 に答える
0

おそらく、あなたはそれを逆手に取っただけです

#define toThisPtr fromThis*
#define toThisObj fromThis

これは、toThisPtr と toThisObj という 2 つのマクロを定義します。そうしないと、あなたが何をしようとしているのかを理解するのに本当に苦労しています。

于 2012-07-30T05:59:37.620 に答える
0

あなたは本当にそれをすることはできませんし、すべきでもありません。:)

このために、私typedefはマクロの代わりに s を個人的に使用します。

typedef toThisPtr fromThis*
typedef toThisObj fromThis

次に、すべてを置換します。

于 2012-07-30T05:59:46.450 に答える