2015-02-09 53 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