2014-03-31 47 views
1

我一直有很多麻煩,我的頭文件,並確保一切正確聲明。首先我的文件:錯誤:使用不完整的類型'struct Item'

//Main.cpp 
#include "Item.h" 
#include "Warehouse.h" 
using namespace std; 

int main() { 
    ... 
} 

//Item.h 
#ifndef ITEM_H 
#define ITEM_H 
#include <string> 
using namespace std; 

class Item { 
    ... 
}; 
#endif /* ITEM_H */ 

//Item.cpp 
#include "Item.h" 

//Warehouse.h 
#define WAREHOUSE_H 
#ifndef ITEM_H 
#define ITEM_H 
using namespace std; 

class Item; 
class Warehouse { 
    ... 
private: 
    Item* array; //problem starts with this 
}; 
#endif /* WAREHOUSE_H */ 

//Warehouse.cpp 
#include "Warehouse.h" 
#include "Item.h" 

Warehouse::Warehouse() { 
    array = new Item[arraySize]; //and this is where I get the error 
} 

我敢肯定這個問題與我的Warehouse.h頭,但每一個組合我儘量不工作要做。對不起,如果沒有足夠的代碼發佈,但我認爲問題是與包括和聲明。

提前致謝。

編輯:澄清這不是在一個文件中。我只是這樣寫的,以簡化事情。以上每一個都是一個單獨的文件。

+1

你的包括警衛都搞砸了。 – juanchopanza

+2

你在所有類的末尾都缺少分號。另外,它真的不是一個好主意,在標題內部使用'namespace'。 – Cameron

+0

main()'last通常是一個好主意 –

回答

0

問題不在此聲明

private: 
    Item* array; //problem starts with this 

可以定義一個指針到一個不完整的類型。

我認爲問題出在你試圖用operator new爲指針分配一個對象或解引用指針的語句。

此外,我不明白爲什麼你不想要在頭Warehouse.h頭Item.h,而不是使用闡述名

class Item; 
3

你包括在頭文件警衛Warehouse.h不正確任何理由。

相反,你要

//Warehouse.h 
#ifndef WAREHOUSE_H 
#define WAREHOUSE_H 
using namespace std; 

// ... 

#endif /* WAREHOUSE_H */ 

當前版本中item.h類定義永遠不會包含在Warehouse.cpp因爲混合了包括警衛Warehouse.h防止

//Warehouse.h 
#define WAREHOUSE_H 
#ifndef ITEM_H 
#define ITEM_H 
using namespace std; 

// ... 

#endif /* WAREHOUSE_H */ 

item.h要讀由於訂單

//Warehouse.cpp 
#include "Warehouse.h" 
#include "Item.h" //Warehouse.cpp 
#include "Warehouse.h" 
#include "Item.h" 

然後編譯器不知道在那一點上的Item的定義,因此錯誤。

另一件事:不要在頭文件中形成using namespace std的習慣。這會導致某些問題。

+2

另外:'using namespace std;'並不酷,特別是在頭文件中。 – juanchopanza

相關問題