2012-08-09 77 views
0
#ifndef CLASS_VEHICLE_ 
#define CLASS_VEHICLE_ 

#include "ns3/ptr.h" 
#include "ns3/object.h" 
#include "ns3/vector.h" 
#include "ns3/core-module.h" 
#include "ns3/network-module.h" 
#include "ns3/mobility-module.h" 
#include "ns3/config-store-module.h" 
#include "ns3/wifi-module.h" 
#include "Cluster.h" 


namespace ns3 
{ 
class Cluster; 

/// define type DeviceTraceCallback 
typedef Callback<void, Ptr<Vehicle>, std::string, Ptr<const Packet> > DeviceTraceCallback; // Line where the error is 
/// define type VehicleReceiveCallback. 
typedef Callback<void, Ptr<Vehicle>, Ptr<const Packet>, Address> VehicleReceiveCallback; 
/// define type PhyRxOkTraceCallback. 
typedef Callback<void, Ptr<Vehicle>, std::string, Ptr<const Packet>, double, WifiMode, enum WifiPreamble> PhyRxOkTraceCallback; 
/// define type PhyRxErrorTraceCallback. 
typedef Callback<void, Ptr<Vehicle>, std::string, Ptr<const Packet>, double> PhyRxErrorTraceCallback; 
/// define type PhyTxTraceCallback. 
typedef Callback<void, Ptr<Vehicle>, std::string, Ptr<const Packet>, WifiMode, WifiPreamble, uint8_t> PhyTxTraceCallback; 
/// define type PhyStateTraceCallback. 
typedef Callback<void, Ptr<Vehicle>, std::string, Time, Time, enum WifiPhy::State> PhyStateTraceCallback; 

class Vehicle : public ns3::Object 
{ 
    ... code section 

}; 
}; 
#endif 

我正在ns3上,我必須實現一個代碼,可以讓我做一些關於車載網絡的模擬。我有幾個班,但只有一個很煩人。事實上,我編譯時有此特定錯誤:錯誤:無效的聲明之前與typedef

"/src/vanet/model/Vehicle.h:45: error: invalid declarator before ‘DeviceTraceCallback’"

,它帶來了噸其他錯誤,

"/src/vanet/model/Vehicle.h:212: error: ‘DeviceTraceCallback’ does not name a type"

"../src/vanet/model/Vehicle.h:214: error: ‘DeviceTraceCallback’ has not been declared".

我真的不明白我做錯了什麼,所以如果有人能幫助我,這將是非常好的!

+1

歡迎來到StackOverflow!請閱讀常見問題解答並提供一個最小的,可編輯的例子(即使用所有'#includes')來顯示問題。 – TemplateRex 2012-08-09 14:41:13

+0

請嘗試將該代碼編輯到_minimum_重現問題 - 只需刪除壞聲明後的所有內容,並刪除它之前的所有內容,而不會引入新錯誤。對於其他人而言,讀取_relevant_代碼時不會受到與該問題相關的代碼的困擾。作爲獎勵,您有時可以在此過程中自己解決問題。 – Useless 2012-08-09 14:41:34

+0

好吧,我這樣做;) – Demyke 2012-08-09 14:46:22

回答

3

你還沒有告訴我們哪一行源代碼的錯誤指的是,但我會假設它是這一個:

typedef Callback<void, Ptr<Vehicle>, std::string, Ptr<const Packet> > DeviceTraceCallback; 

在該行提到的所有類型和模板已經在的一個聲明包含的標題?特別是:

  • 你還沒有直接包含<string>。這樣做是個好主意,即使其他標題之一可能會間接包含它。
  • 您還沒有聲明Vehicle類型,稍後在此文件中定義。您需要申報(class Vehicle;內部namespace ns {}),然後才能在此聲明中使用它。
+0

Thx爲您的快速答案,是的,我已經在另一個標題中包含。我不明白第二點,因爲實際上它是Vehicle類,所以我必須在typedef之前放置類Vehicle? – Demyke 2012-08-09 15:01:09

+0

我忘了一些東西,實際上錯誤是在第一個typedef行,但如果我切換typedef的順序,它仍然是錯誤行的第一個typedef行。 – Demyke 2012-08-09 15:09:21

+1

@Demyke:是的,你必須在'typedef'之前聲明'Vehicle'。只需在typedef之前添加'class Vehicle'行;您不必移動整個班級定義。 – 2012-08-09 15:14:09

相關問題