1

なぜこれがここで起こっているのですか?

float *image;
long size_img=par->N*par->M;

image = calloc(size_img, sizeof(float));//the compiler shows error here

エラーは

error: a value of type "void *" cannot be assigned to an entity of type "float *"

キャストをするべきですか?偽のことは、プログラムの他の場所で同じことを行い、そのエラーが表示されないことです。

これは、par という名前の構造体の一部として持っています

long *tbegin;

そして、私はします

par->tbegin = calloc( SUMA_J, sizeof ( long ) );

そして、私はエラーが発生しません。

4

1 に答える 1

4

ここで起こっていることは、コードを誤って C++ コードとしてコンパイルしている可能性が高いということです。C++ (C とは対照的に) ではvoid *、他のポインター型に暗黙的に変換できません。

コードを C で記述する場合は、必ず C としてコンパイルしてください。コードを C++ で記述する場合は、明示的な型変換演算子を使用してvoid *ポインターを他のポインター型に変換する必要があります。

ポインター型への変換long *は、C としてコンパイルされた他の変換単位 (つまり、他のファイル) で行われる可能性があります。これが、おそらく成功する理由です。

コンパイラは、翻訳単位ごとに独立して C および C++ モードを使用できることに注意してください。多くのコンパイラは、ファイル拡張子に基づいて C と C++ のどちらかを選択し、ファイルを C としてコンパイルし.c.cppファイルを C++ としてコンパイルします。

于 2013-07-02T01:26:02.260 に答える