2012-05-06 66 views
0

分配給「結構MYSTRUCT *」我想學習目標C。不兼容的指針類型從「結構MYSTRUCT *」

這是在我的.m文件

@interface TetrisEngine() 
@property (nonatomic, readwrite) struct TetrisPiece *currPiece; 
@end 

struct TetrisPiece { 
    int name; 
    struct { 
     int colOff, rowOff; 
    } offsets[TetrisPieceRotations][TetrisPieceBlocks]; 
}; 

這下傢伙的內容不應該是相關的。我假設返回值是所有你需要爲了看助陣

static struct TetrisPiece pieces[TetrisNumPieces] = {...}; 

@implementation TetrisEngine 
@synthesize currPiece; 

- (void) nextPiece 
    currPiece = &pieces[ ((random() % (TetrisNumPieces * 113)) + 3) % TetrisNumPieces]; 

,這是我得到的錯誤:不兼容的指針類型從「結構TetrisPiece *」

分配給「結構TetrisPiece *」
+1

如果你有一個語言OO設施,爲什麼使用結構在這裏? – 2012-05-06 04:36:13

回答

4

文件VAR需要爲C型指針,像這樣明確聲明...

@interface TetrisEngine() { 
    // added curly braces and this 
    struct TetrisPiece *currPiece; 
} 

@property (nonatomic, readwrite) struct TetrisPiece *currPiece; 
@end 

其餘的將正常運行是。雖然我同意另一個答案,即有更多現代方法來聲明oo中的結構。

+0

另外 - 如果你使用@synthesize,在實現文件中,爲你的財產就沒有必要將其添加在聲明文件(.H)(結構TetrisPiece * currPiece)。如果沒有與綜合屬性的名稱相匹配的實例變量,則會自動創建一個。 –

+0

謝謝。這只是c型指針結構的情況嗎?換句話說,我是否允許跳過這個顯式聲明,用於剩餘的Objective-C類型變量? – austin

+0

是的,就像@iluvatar_GR提到的一樣。對於對象指針,@ synthesize將隱含地執行該聲明。 – danh