关于 c++ extern 用法:: undefined reference to ~

问题描述

我是 C++ 语言的初学者。 我正在用 C++ 编写一个 ns3(网络模拟 3)程序。

我希望多个文件共享一张地图 。例如,a.cc 文件向映射写入值,而另一个 b.cc 文件将值写入映射。

我以为我必须使用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 (将#修改为@)