2012-08-09 3 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:214: error: ‘DeviceTraceCallback’ has not been declared".

난 정말 내가 뭘 잘못했는지 이해가 안

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

그것은

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

또는

같은 톤의 기타 오류를 제공합니다 : 내가 컴파일 사실 때이 특정 오류가 , 누군가가 나를 도울 수 있다면 아주 좋을 것입니다!

+1

Welcome to StackOverflow! FAQ를 읽고 문제를 표시하는 최소한의 컴파일 가능한 예 (즉'#include '모두 포함)를 제공하십시오. – TemplateRex

+0

문제를 재현하는 _minimum_으로 코드를 편집 해보십시오. 잘못된 선언 이후의 모든 내용을 삭제하고 새로운 오류를 발생시키지 않고 가능한 모든 것을 제거하십시오. _relevant_ 코드가 문제와 관련없는 코드로 둘러싸여 있지 않은 경우 다른 모든 사람들이 _relevant_ 코드를 읽는 것이 훨씬 쉽습니다. 보너스로, 프로세스 중에 문제를 직접 파악할 수 있습니다. – Useless

+0

알았어;) – Demyke

답변

3
당신은 오류가 참조하는 소스 라인 우리를 표시하지 않은,하지만 난이 하나의 가정합니다

:

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

그 라인에 언급 된 모든 유형 및 템플릿 중 하나에 선언 된 포함 된 헤더? 특히 :

  • <string>을 직접 입력하지 않았습니다. 다른 헤더 중 하나에 간접적으로 포함 되더라도 그렇게하는 것이 좋습니다.
  • 이 파일의 뒷부분에 정의 된 Vehicle 유형을 선언하지 않았습니다. 이 선언에서 사용할 수 있으려면 먼저 선언 (class Vehicle; ~ namespace ns {})이 필요합니다.
+0

답장을 보내 주신 분, 예, 을 다른 헤더에 포함 시켰습니다. 두 번째 요점은 실제로 Vehicle 클래스이기 때문에 이해가되지 않습니다. 그래서 typedef 앞에 Vehicle 클래스를 추가해야합니까? – Demyke

+0

그리고 뭔가 잊어 버렸습니다. 실제로 첫 번째 typedef 줄에 오류가 있습니다.하지만 typedef의 순서를 바꾸면 첫 번째 typedef 줄에 오류 줄이 표시됩니다. – Demyke

+1

@Demyke : 예,'typedef '앞에'Vehicle'을 선언해야합니다. typedef 앞에'class Vehicle;'줄을 추가하면됩니다. 전체 클래스 정의를 이동할 필요가 없습니다. –

관련 문제