2016-03-08 104 views
0

在我的項目中我有三個文件:PlayBoard.c,Board。 c,Board.h,相關部分出現在下面。在PlayBoard中,我有一個指向struct board類型變量的指針。 當試圖編譯時,我經常得到一個「解除引用指針爲不完整類型」。 將Board的定義移動到Board.h有幫助,但不可能(這是一個作業問題),所以我需要另一種方法。C錯誤:取消引用指向不完整類型

PlayBoard.c:

#include "Board.h" 
#include <assert.h> 
#include <stdio.h> 
#include <stdlib.h> 
... 
int main() 
{ 
BoardP theBoard =//creation of new Board; 
... 
} 

Board.h:

#ifndef BOARD_H 
#define BOARD_H 


// ------------------------------ includes ------------------------------ 

#include <stdbool.h> 
#include <stdio.h> 

// -------------------------- definitions ------------------------- 

/** 
    * A pointer to Gomoku table. 
* 
*/ 


typedef struct Board* BoardP; 
/** 
    * A struct of a Gomoku table. 
    */ 
typedef const struct Board* ConstBoardP; 

... 

#endif 

和Board.c:

#ifndef BOARD_C 
#define BOARD_C 

#include "Board.h" 


typedef struct Board 
{ 
    char **_board; 
    int _cols; 
    int _rows; 
    bool _turn; 
    int _xCounter; 
    int _oCounter; 
    int _lastx; 
    int _lasty; 

} Board; 

... 
#endif 
+0

和你如何編譯? –

+1

請創建[mcve] –

+0

'BoardP theBoard'需要一個完整的類型。那時你還沒有一個。帶編譯按鈕的 – juanchopanza

回答

1

完整型的你struct是Board.c, PlayBoard.c對此一無所知。它只是一個struct的聲明,您尚未定義(在您的Board.h文件中)。將struct的定義移動到頭文件中。除此之外,請確保PlayBoard.c僅使用指向Board(或根據您的typedef的BoardP)的指針。你不需要一個完整的類型來聲明一個指針。這可以確保任何使用struct Board僅限於Board.c(我認爲這是您的任務的重點)。

+0

我無法移動定義。我怎樣才能讓PlayBoard知道董事會? – proton

+0

除了'Board.c'之外,所有源文件中的結構都使用指針,它們實際上可以操縱板結構。另請參閱重複,它明確地通過這一點。 –

相關問題