Я пытаюсь использовать библиотеку, где у одного из классов есть конструктор, например:
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&)
Итак, я вижу правильный прототип (хотя здесь написано 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
Я довольно растерялся относительно того, почему это происходит. Я чувствую, что пропустил что-то очевидное.
* В ответ на ответы:
Библиотека получает size_t из "sys / types.h", поэтому я не думаю, что мы используем разные версии. Библиотека была скомпилирована в моей системе с тем же компилятором (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".
Я