最近在写NS3,遇到一个问题就是例如ManetAdjManager.h有一个类叫ManetAdjManager的类,定义了 以下结构体类型
typedef struct TopologyNode{
uint8_t source;
uint8_t dest;
uint8_t SigParamvalue;
}TopologyNodestruct;
typedef struct TopologyTable {
uint8_t localaddr ;
std::vector<TopologyNodestruct> mTopologyTable ;
}TopologyTablestruct;
然后下一层ManetMACCtrl.h,里也有一个类ManetMACCtrl,由于两层间要进行数据交互,所以都会用到ManetAdjManager类所定义的结构体类型。
现在的情况是ManetMACCtrl.h里会用到ManetAdjManager.h里类所定义的结构体类型,所以ManetMACCtrl.h就会包含ManetAdjManager.h;在ManetMACCtrl.h里面这样定义
ManetAdjManager::TopologyNodestruct m_ TopologyNode;
这样是没问题的。
但是ManetAdjManager.h是要把数据往ManetMACCtrl.h的某接口传,于是ManetAdjManager.h就会把ManetMACCtrl.h给include进来,于是编译就炸了,出现各种类型定义找不到的错误,郁闷了很久。
最后发现原来是出现了相互include相互引用的情况,我不知道为什么相互包含不行,C++没学到位,后面我就在另外单独写一个类,这个类专门写这写类型定义在这里面,然后就不会出现上面的情况了!
我把遇到的问题和解决办法整理出来,给自己做个笔记。
上面的问题是为什么我还得去查查C++或者C语言的书。如果有知道更具体的细节,欢迎交流。
在NS3编程中,遇到ManetAdjManager类与ManetMACCtrl类相互引用结构体类型导致编译错误的问题。通过将结构体定义移到独立头文件避免相互包含,从而解决了这个问题。本文记录这一问题及其解决方案。
7万+





