问题描述
我是 C++ 语言的初学者。 我正在用 C++ 编写一个 ns3(网络模拟 3)程序。
我希望多个文件共享一张地图
我以为我必须使用extern关键字来实现这个功能,所以我在我的文件中像这样使用了extern
database.h
#include <vector>
#include <map>
#include <iostream>
namespace ns3{
extern std::map <int32_t,std::vector <double> > mecDb;
}
database.cc
#include <vector>
#include <map>
#include "ns3/database.h"
namespace ns3{
std::map <int32_t,std::vector <double> > mecDb;
}
然后,我想使用这里在packetsink.cc和lte-mec.cc文件中定义的mecDb映射。 所以我将database.h头文件包含在三个文件中:packetsink.cc、lte-mec.cc和packetsink.h。
packetsink.cc、lte-mec.cc、packetsink.h
#include "ns3/database.h"
在每个文件中,我都根据需要使用了 map(mecDb)。 **例如在packetsink.cc **
if(mecDb.find(nodeID)!=mecDb.end()){
mecDb.erase(nodeID);
std::pair<int32_t,std::vector<double>> p1=make_pair(nodeID,vec);
mecDb.insert(p1);
}
和lte-mec.cc
for(uint16_t i=0; i<simTime; i++){
Simulator::Schedule(Seconds(i),&PrintDataBase,mecDb);
}
该语句调用模拟器每秒输出一张地图的函数。在此处使用 lte-mec.cc 文件中的 mecDb,无需任何单独声明。
在这种情况下,当我构建时,出现以下错误。
usr/bin/ld: ./libns3.27-applications-debug.so: undefined reference to 'ns3::mecDb'
collect2 error: ld returned 1 exit status
我对 extern 和 mecDb 很困惑。我哪里做错了?准确地说,为什么我收到了对“ns3::mecDb”错误的未定义引用?
或者,如果我要实现的功能(共享地图)需要以其他方式实现,请告诉我如何实现。 感谢您的帮助...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)