2012-12-14 27 views
-1

假設我有一些結構DATA定義。然後我嘗試下面的代碼:在C中struct'type cast'錯誤?

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

爲什麼我會在'類型轉換'中出現錯誤C2440?

+0

什麼是「錯誤C2440」? – melpomene

+1

@melpomene:讓我谷歌爲您:http://msdn.microsoft.com/en-us/library/sy5tsf8z%28VS.80%29.aspx –

+0

你正在編譯爲C或C++? 「c」標記意味着C,但將「struct DATA」類型稱爲「DATA」意味着C++。 –

回答

2

這部分的問題是:

(DATA)&data1 

在這裏,你需要的data1製作成一個指針的地址,類型struct DATA *。然後,您嘗試將其轉換爲非指針struct DATA類型,這可能是錯誤的原因。 (提示:請在將來發布完整和未經編輯的錯誤消息。)

實際上,您實際上不必執行任何類型的轉換或指針處理或解引用。只是一個結構分配給其他的,編譯器會創建代碼做正確的複製:

data2 = data1; 
+0

警告類型不是'DATA *',但它是'struct DATA *' – benjarobin

0

正確的事情做的是:

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

但這是沒用...什麼都不這樣做:

struct DATA data1, data2; 
data2 = data1; 
0

轉換爲結構類型是非法的。由演員操作符指定的類型必須是void或標量類型(即算術或指針類型)。

此:

data2 = data1; 

是一個更簡單的做我認爲你正在試圖做方式(這是很難說)。