2015-02-09 75 views
0

我有代碼的問題從書:錯誤使用的typedef的typedef

const int SQUARE_ARRAY_SIZE = 4; 
const int SQUARE_INFO_SIZE = 4; 
typedef Square SquareArray[SQUARE_ARRAY_SIZE]; 
typedef SquareArray SquareInfo[SQUARE_INFO_SIZE]; 

SquareArray RedGeneric = { Square(0, 0), Square(0, 1), 
Square(1, 1), Square(1, 0) }; 
SquareInfo RedInfo = { &RedGeneric, &RedGeneric, \\problem here 
&RedGeneric, &RedGeneric }; 

它破口大罵:

錯誤C2440: '初始化':無法從「SquareArray(轉換* )」到 '廣場'

智能感知:沒有合適的構造存在,從 「SquareArray *」 到 「廣場」

轉換

據我瞭解SquareInfo代表SquareArray的陣列,但好像vs2013想打破它廣場和結果

SquareInfo m_squareInfo; ... 
SquareArray* pSquareArray = m_squareInfo[m_iDirection]; 

破口大罵:

智能感知:類型的值「常量廣場* 「不能用於初始化類型的實體‘SquareArray *’

書是從2008年,我不知道它的工作當時或有錯誤的開始。至於q請告訴我什麼是錯誤的以及如何使它工作。

+6

將該書扔進垃圾箱。 – 2015-02-09 18:44:15

+3

你確定這本書寫了'typedef SquareArray SquareInfo [SQUARE_INFO_SIZE];'而不是'typedef SquareArray * SquareInfo [SQUARE_INFO_SIZE];'?無論如何,這似乎意味着後者。 – 2015-02-09 18:45:12

+1

什麼書?或者它只是被稱爲「書」? – 2015-02-09 18:49:51

回答

4

我相當肯定,這本書的意思是寫

typedef SquareArray* SquareInfo[SQUARE_INFO_SIZE]; 
//    ^

SquareInfo是一個指針數組SquareArray S,而不是SquareArray秒的陣列。這與使用&RedGenericSquareArray* pSquareArray = m_squareInfo[m_iDirection];的初始化一致。

1

看起來像你的書已經在該行

typedef SquareArray SquareInfo[SQUARE_INFO_SIZE]; 

一個錯字當我做這是一個指針

typedef SquareArray* SquareInfo[SQUARE_INFO_SIZE]; 
       //^

代碼compiles fine