C++ undefined reference 类构造函数

标签 c++ linker reference undefined

我正在尝试使用其中一个类具有如下构造函数的库:

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)...

我可以很好地使用图书馆的其他部分。以下是相关类的实际源文件:

http://libosmscout.git.sourceforge.net/git/gitweb.cgi?p=libosmscout/libosmscout;a=blob;f=libosmscout/include/osmscout/AreaNodeIndex.h

http://libosmscout.git.sourceforge.net/git/gitweb.cgi?p=libosmscout/libosmscout;a=blob;f=libosmscout/src/osmscout/AreaNodeIndex.cpp

我很不明白为什么会这样。我觉得我错过了一些明显的东西。

*回应回复: 该库从“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/

相关文章:

ios - clang : error: linker command failed with exit code 1 (use -v to see invocation) with Quickblox

c++ - VS2013 中的静态 Qt 程序构建 - 许多 Unresolved external 问题

c# - 如何在 C# 中传递当前实例的引用

.net - 引用 Microsoft.SqlServer.Smo 的应用程序需要在目标计算机上包含其他程序集?

c++ - 如何确定进程打开文件的顺序?

c++ - 逗号在数字中的含义

c++ - 安全、检查转换为 C++ 基类,无需使用额外的行

linux - 动态链接器和动态加载器有什么区别?

c - C 中的多重引用和取消引用

c++ - 虚拟表未定义