2012-07-19 310 views
0

我有一個名爲BottlingPlant的類。 我創建了以下headerfile:編譯文件時出現C++錯誤

#ifndef __BOTTLINGPLANT_H__ 
#define __BOTTLINGPLANT_H__ 

#include <iostream> 

class BottlingPlant { 
public: 
BottlingPlant(Printer &prt, NameServer &nameServer, unsigned int numVendingMachines, unsigned int maxShippedPerFlavour, unsigned int maxStockPerFlavour, unsigned int timeBetweenShipments); 
void getShipment(unsigned int cargo[ ]); 
void action(); 
}; 

#endif 

而下面的.cc文件:

#include <iostream> 
#include "PRNG.h" 
#include "bottlingplant.h" 

BottlingPlant::BottlingPlant(Printer &prt, NameServer &nameServer, unsigned int numVendingMachines, unsigned int maxShippedPerFlavour, unsigned int maxStockPerFlavour, unsigned int timeBetweenShipments) { 


} 

void BottlingPlant::getShipment(unsigned int cargo[ ]) { 

} 

void BottlingPlant::action() { 

} 

當我嘗試編譯.cc的,它給了我在的.cc和.h的錯誤行:

BottlingPlant::BottlingPlant(Printer &prt, NameServer &nameServer, unsigned int numVendingMachines, unsigned int maxShippedPerFlavour, unsigned int maxStockPerFlavour, unsigned int timeBetweenShipments) 

說,有是&令牌之前預期)。這對我沒有任何意義,因爲沒有開放(。我只是不確定它爲什麼會給出這個錯誤。 PrinterNameServer只是單獨的類作爲項目的一部分,但是..我是否還需要包含它們的頭文件或不包含?

任何幫助,非常感謝!

+1

避免使用雙下劃線或下劃線後跟大寫字母來啓動標識符。這些保留用於實施。 – chris 2012-07-19 01:03:52

+1

是的,您需要在當前實現中使用Printer和Nameserver的頭文件。 – Yuushi 2012-07-19 01:06:50

+0

關於你的問題,每個文件都應該包括它所需要的,而不是更多。在'BottlingPlant'中,'Printer'等尚未包含在內,您不應該指望先來到另一個文件。 – chris 2012-07-19 01:07:05

回答

5

您需要包含您正在使用的任何類的頭文件,甚至是同一個項目中的類。編譯器將每個單獨的源文件作爲單獨的translation unit進行處理,並且如果定義它的頭未包含在該翻譯單元中,它將不知道該類存在。

1

您的.h文件應該包含具有Printer和NameServer類定義的頭文件。作爲一個例子,如果他們在MyHeader.h中,下面的示例應該修復這些錯誤。

#ifndef __BOTTLINGPLANT_H__ 
#define __BOTTLINGPLANT_H__ 

#include <iostream> 
#include "MyHeader.h" 

class BottlingPlant { 
public: 
BottlingPlant(Printer &prt, NameServer &nameServer, unsigned int numVendingMachines, unsigned int maxShippedPerFlavour, unsigned int maxStockPerFlavour, unsigned int timeBetweenShipments); 
void getShipment(unsigned int cargo[ ]); 
void action(); 
}; 

#endif