我正在尝试使用其中一个类具有如下构造函数的库:
public:
AreaNodeIndex(size_t cacheSize);
我正在尝试在我的程序中实例化此类的一个对象,如下所示:
size_t const cacheSize = 50000;
AreaNodeIndex areaNodeIndex(cacheSize);
链接器给我以下错误:
main.o: In function `main':
make: Leaving directory `/home/Dev/_quicktest_build'
main.cpp:(.text+0x212): undefined reference to
osmscout::AreaNodeIndex::AreaNodeIndex(unsigned int)
我想我有必要的包含,我正在用编译器链接到库。例如,如果我故意在没有任何参数的情况下尝试实例化对象,则会出现此错误:
../quicktest/main.cpp: In function ‘int main()’:
../quicktest/main.cpp:36: error: no matching function for call to ‘osmscout::AreaNodeIndex::AreaNodeIndex()’
/usr/local/include/osmscout/AreaNodeIndex.h:75: note: candidates are: osmscout::AreaNodeIndex::AreaNodeIndex(size_t)
/usr/local/include/osmscout/AreaNodeIndex.h:33: note: osmscout::AreaNodeIndex::AreaNodeIndex(const osmscout::AreaNodeIndex&)
所以我可以看到正确的原型(prototype)(尽管这里说的是 size_t,之前说的是 unsigned int)...
我可以很好地使用图书馆的其他部分。以下是相关类的实际源文件:
我很不明白为什么会这样。我觉得我错过了一些明显的东西。
*回应回复: 该库从“sys/types.h”获取 size_t,所以我不认为我们使用的是不同的版本。该库是在我的系统上使用相同的编译器(g++、linux)编译的。 更改“const”说明符位置无效。
我正在链接到图书馆。正如我提到的,我可以毫无问题地使用库中的其他类。这是链接命令:
g++ -Wl,-O1 -Wl,-rpath,/home/QtSDK/Desktop/Qt/473/gcc/lib -o quicktest main.o -L/home/QtSDK/Desktop/Qt/473/gcc/lib -losmscout -lpthread
库名称是“osmscout”。
kfl
最佳答案
在您的案例中,问题的可能原因可能是混合不同的 size_t
正如@rodrigo 所提到的。为了保持一致性,也许您可以包括 <cstddef>
你在哪里使用 size_t
除非你的项目声明它拥有 typedef
对于 size_t
.请引用以下链接。
请引用Does "std::size_t" make sense in C++?
希望这对您有所帮助!
关于C++ undefined reference 类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552515/