2012-08-09 63 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