错误地使用typedef的typedef(?)

时间:2015-02-09 18:42:51

标签: c++

我的书代码存在问题:

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(*)'到' Square'

     

IntelliSense:没有合适的构造函数可以转换为" SquareArray *"到" Square"

据我所知,SquareInfo代表SquareArray数组,但似乎vs2013希望将其分解为Squares并作为结果

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

叫喊:

  

IntelliSense:类型" const Square *"的值不能用于初始化类型" SquareArray *"的实体。

图书是从2008年开始的,我不知道它是否有效,或者从一开始就有错误。至于q,请告诉我什么是真正的错误以及如何使其发挥作用。

2 个答案:

答案 0 :(得分:4)

我很确定这本书的意思是写

typedef SquareArray* SquareInfo[SQUARE_INFO_SIZE];
//                 ^

即,SquareInfo是指向SquareArray的指针数组,而不是SquareArray的数组。这与使用&RedGenericSquareArray* pSquareArray = m_squareInfo[m_iDirection];的初始化一致。

答案 1 :(得分:1)

看起来你的书在该行上有拼写错误

typedef SquareArray SquareInfo[SQUARE_INFO_SIZE];

当我把它变成指针时

typedef SquareArray* SquareInfo[SQUARE_INFO_SIZE];
                // ^

代码compiles fine