3

VS2005でC++プロジェクトをコンパイルするときにC2440エラーが発生するという問題があります。このエラーは、別のプロジェクトにある既存のCコードが原因で、charまたはintポインターのいずれかにvoidポインターをキャストします。

コードは次のようになります。

void * bbb;
... // some code which defines the void pointer
int * aaa = bbb;

ただし、C ++では、次のようにタイプを有効にキャストする必要があります。

int * aaa = (int *)bbb;

私の質問は、VS2005にフラグまたはコンパイルオプションがあり、メインプロジェクトをC ++でコンパイルし、Cとしてコンパイルするプロジェクトに応じてこのエラーを無視できるかどうかです。

元のソースは共有プロジェクトであるため、変更したくありません。

4

2 に答える 2

2

ファイルに「something.c」という名前を付けると、コンパイラは[明示的に指定されていない限り]ファイルを次のようにコンパイルしますC(したがって、キャストを使用せずにポインタ変換を受け入れます)。「something.cpp」という名前のファイルはC++としてコンパイルされ、ポインターであっても、ポインターを別の型に変換するにはキャストが必要になりvoidます。

于 2013-02-25T00:24:29.253 に答える
1

これを行う唯一の方法は、問題の原因となったヘッダーファイルを編集することでした。共有プロジェクトにマージして戻すことができる少数のファイルであることが判明しました。

VisualC++でこれを回避する方法はありません。以前-fpermissiveはgccのエラーを無視していました。

だから私はちょうど更新しました:

int * aaa = (int *)bbb;
于 2013-02-26T05:43:39.460 に答える