假設我有一些結構DATA
定義。然後我嘗試下面的代碼:在C中struct'type cast'錯誤?
struct DATA data1, data2;
data2 = (DATA)(*(DATA))&data1);
爲什麼我會在'類型轉換'中出現錯誤C2440?
假設我有一些結構DATA
定義。然後我嘗試下面的代碼:在C中struct'type cast'錯誤?
struct DATA data1, data2;
data2 = (DATA)(*(DATA))&data1);
爲什麼我會在'類型轉換'中出現錯誤C2440?
這部分的問題是:
(DATA)&data1
在這裏,你需要的data1
製作成一個指針的地址,類型struct DATA *
。然後,您嘗試將其轉換爲非指針struct DATA
類型,這可能是錯誤的原因。 (提示:請在將來發布完整和未經編輯的錯誤消息。)
實際上,您實際上不必執行任何類型的轉換或指針處理或解引用。只是一個結構分配給其他的,編譯器會創建代碼做正確的複製:
data2 = data1;
警告類型不是'DATA *',但它是'struct DATA *' – benjarobin
正確的事情做的是:
struct DATA data1, data2;
data2 = (struct DATA)(*((struct DATA*)&data1));
但這是沒用...什麼都不這樣做:
struct DATA data1, data2;
data2 = data1;
轉換爲結構類型是非法的。由演員操作符指定的類型必須是void
或標量類型(即算術或指針類型)。
此:
data2 = data1;
是一個更簡單的做我認爲你正在試圖做方式(這是很難說)。
什麼是「錯誤C2440」? – melpomene
@melpomene:讓我谷歌爲您:http://msdn.microsoft.com/en-us/library/sy5tsf8z%28VS.80%29.aspx –
你正在編譯爲C或C++? 「c」標記意味着C,但將「struct DATA」類型稱爲「DATA」意味着C++。 –