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

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”。

fl

最佳答案

您遇到的问题的可能原因可能是由于@rodrigo提到的不同size_t的混合。为了保持一致,除非您的项目为<cstddef>声明了自己的size_t,否则您可以在使用typedef的地方包括size_t。请引用下面的链接。

请引用Does "std::size_t" make sense in C++?

希望这可以帮助!

08-04 00:18