2013-09-16 37 views
0

我的工作,我們需要一個工作項目(包含在一個CPP文件),並給它幾個之間分裂的分配模塊/ cpp文件。這是我第一次使用頭文件,並且我不確定要做什麼。我知道頭文件用於聲明結構和變量等,但沒有其他的。我經常得到一個錯誤是」 ......不是在這個範圍內宣佈從我的代碼示例。不確定如何使用頭,「......不是在這個範圍內聲明」的錯誤

在‘cookie.h’,我有以下的代碼;

#ifndef _cookie_H_INCLUDED_ 
#define _cookie_H_INCLUDED_ 

struct Cookie { 


int initialNumberOfRows; 

/// Number of rows currently remaining in the cookie 
int numberOfRows; 

/// Number of columns currently remaining in the cookie 
int numberOfColumns; 


/** 
* The "shape" of the cookie. 
* 
* If crumbs[i] == j, then the cookie currently 
* has crumbs filling the j columns at row i 
*/ 
int* crumbs; 
}; 

然而,當我嘗試運行該程序,我得到錯誤「的cookie並沒有在這個範圍內聲明」,從另一頭文件專門發起「computerPlayer.h」從節中的代碼如下如;

#ifndef _computerPlayer_H_INCLUDED_ 
#define _computerPlayer_H_INCLUDED_ 
bool isADangerousMove (Cookie& cookie, int column, int row); 
#endif // _game_player_INCLUDED_ 

我不確定如何將頭文件'鏈接'在一起,如果這是正確的思考方式嗎?

+0

從你貼什麼'cookie.h'缺少'#endif'。 –

+0

您是否在'computerPlayer.h'中包含'cookie.h'? – P0W

+0

注:我*肯定*收盤'#endif'在'computerPlayer.h'頭文件...柵欄柱'#ENDIF // _game_player_INCLUDED_'僅僅是一個類型,對不對?你肯定沒有在兩個不同的標題中不小心使用相同的fencepost ID,對吧? – WhozCraig

回答

1

computerPlayer.h但從編譯器的點:

#ifndef _computerPlayer_H_INCLUDED_ 
#define _computerPlayer_H_INCLUDED_ 
bool isADangerousMove (Cookie& cookie, int column, int row); 
#endif // _game_player_INCLUDED_ 

編譯器試圖編譯東西來#include這一點,所以我們可以想像,它已經插入附近的源文件的頂部。的isADangerousMove聲明指Cookie,但是編譯器也從來沒有聽說過Cookie,因此它拒絕編譯這個事情。

,你可以#include "cookie.h"computerPlayer.h頂部,但是這將是矯枉過正。所以,應該使用向前聲明

#ifndef _computerPlayer_H_INCLUDED_ 
#define _computerPlayer_H_INCLUDED_ 
struct Cookie; 
bool isADangerousMove (Cookie& cookie, int column, int row); 
#endif // _game_player_INCLUDED_ 

這告訴編譯器,有一個叫結構Cookie。什麼是Cookie?目前來說,這並不重要。這是編譯器編譯代碼的足夠信息 - 可能包括調用isADangerousMove - 並生成目標文件(例如computerPlayer.o)。稍後,當鏈接器嘗試將這些目標文件鏈接在一起時,它將查找此結構的定義(位於cookie.h中),如果它找不到它,則會出現鏈接器錯誤。

+0

我試着做「struct Cookie」修復,而且效果很好!但是,我還有其他類似的問題,通過包含其他.h文件很容易解決,我將嘗試自行修復此程序的其餘部分。十分感謝你的幫助! – Josh

+0

還有一件事我無法弄清楚。在game.h中,它表示「Cookie不命名類型」。當我添加「結構餅乾」,甚至「#include」cookie.h「,它仍然給我錯誤,」字段cookie有不完整的類型「和原始錯誤,我不知道如何解決這個問題。 – Josh

+0

@Josh:'結構餅乾;'就足夠了這個函數聲明,它是** **沒有足夠的函數(或結構或類)*定義*在這種情況下,編譯想知道什麼是'Cookie'。 *是*。如果#include cookie。h「'不起作用,那麼我懷疑標題守衛有問題(儘管我必須看到代碼是肯定的)。 – Beta

相關問題