2010-06-22 156 views
1

我有這樣的類型:C++類型轉換:錯誤C2440:'=':無法從'short *'轉換爲'DCTBLOCK'

typedef short DCTELEM; 
typedef DCTELEM DCTBLOCK[64]; 

最後一種類型的數組和指向malloc的短褲陣列的指針:

DCTBLOCK MQUAD; 
short * ptrArray; 

我需要MQUAD下注到ptrArray指向的特定位置;

在CI中會多寫一些類似

MQUAD = ptrArray + 3 * 2; 

並且在指向所需位置之後有MQUAD,但我得到

錯誤C2440:'=':無法從'短轉換*'到'DCTBLOCK'

在C++中,因爲我知道一種類型的數組和指向某種類型的指針存在差異。

回答

1

你的MQUAD變量是一個數組,不是指針,所以你不能指定它(感謝Remy Lebeau的評論)。如果你把它聲明爲:

DCTELEM *MQUAD; 

那麼你可以分配給它:

MQUAD = reinterpret_cast<DCTELEM *>(ptrArray + 3 * 2); 

這是使用C++語法投。如果你也喜歡,你可以使用C語言轉換語法。

+0

MQUAD是一個數組變量,而不是一個指針變量。你不能爲它指定一個指針值。如果Anton希望MQUAD指向ptrArray變量所指向的malloc'ed shorts內的某個位置,則MQUAD必須聲明爲DCTELEM *或short *指針。 – 2010-06-22 01:37:05

+0

@Remy Lebeau:的確,很對。我會更新我的答案。 – 2010-06-22 02:12:29

+0

是的,完全可行,我剛剛意識到,在打開窗口之前1分鐘:)。 – Anton 2010-06-22 02:31:14

0

的主要錯誤是

DCTBLOCK MQUAD // it's wrong 
DCTELEM* MQUAD // it's right 

,你可投如u想

MQUAD = ptrArray + 3 * 2; 
相關問題