-1

いくつかの構造体がDATA定義されているとします。次に、次のコードを試します。

struct DATA data1, data2;
data2 = (DATA)(*(DATA))&data1);

「型キャスト」でエラー C2440 が発生するのはなぜですか?

4

3 に答える 3

2

この部分が問題です:

(DATA)&data1

data1ここでは、ポインタ type にするアドレスを取得しますstruct DATA *struct DATA次に、おそらくエラーの原因である非ポインター型にキャストしようとします。(ヒント: 今後、完全で未編集のエラー メッセージを投稿してください。)

実際には、キャスト、ポインターのアドレス処理、または逆参照を行う必要はまったくありません。1 つの構造体を別の構造体に割り当てるだけで、コンパイラは適切なコピーを行うコードを作成します。

data2 = data1;
于 2012-12-14T23:30:22.817 に答える
0

構造体型へのキャストは違法です。キャスト演算子によって指定される型は、voidまたはスカラー型 (つまり、算術型またはポインター型) でなければなりません。

これ:

data2 = data1;

あなたがやろうとしていると私が思うことを行うためのはるかに簡単な方法です(伝えるのは難しいです)。

于 2012-12-15T08:56:08.313 に答える
0

正しいことは次のとおりです。

struct DATA data1, data2;
data2 = (struct DATA)(*((struct DATA*)&data1));

しかし、これは役に立たない...これをしていないこと:

struct DATA data1, data2;
data2 = data1;
于 2012-12-15T00:20:27.310 に答える