いくつかの構造体がDATA
定義されているとします。次に、次のコードを試します。
struct DATA data1, data2;
data2 = (DATA)(*(DATA))&data1);
「型キャスト」でエラー C2440 が発生するのはなぜですか?
いくつかの構造体がDATA
定義されているとします。次に、次のコードを試します。
struct DATA data1, data2;
data2 = (DATA)(*(DATA))&data1);
「型キャスト」でエラー C2440 が発生するのはなぜですか?
この部分が問題です:
(DATA)&data1
data1
ここでは、ポインタ type にするアドレスを取得しますstruct DATA *
。struct DATA
次に、おそらくエラーの原因である非ポインター型にキャストしようとします。(ヒント: 今後、完全で未編集のエラー メッセージを投稿してください。)
実際には、キャスト、ポインターのアドレス処理、または逆参照を行う必要はまったくありません。1 つの構造体を別の構造体に割り当てるだけで、コンパイラは適切なコピーを行うコードを作成します。
data2 = data1;
構造体型へのキャストは違法です。キャスト演算子によって指定される型は、void
またはスカラー型 (つまり、算術型またはポインター型) でなければなりません。
これ:
data2 = data1;
あなたがやろうとしていると私が思うことを行うためのはるかに簡単な方法です(伝えるのは難しいです)。
正しいことは次のとおりです。
struct DATA data1, data2;
data2 = (struct DATA)(*((struct DATA*)&data1));
しかし、これは役に立たない...これをしていないこと:
struct DATA data1, data2;
data2 = data1;