Нерешенный Внешний символ - PullRequest
1 голос
/ 18 апреля 2010

Я получаю ошибку компоновки, и я не уверен, на что она ссылается.

Вот ошибка

1> Main.obj: ошибка LNK2019: неразрешенный внешний символ "public: void __thiscall BinaryHeap, класс std :: allocator>>, класс Comp, классstd :: allocator>>> :: insert (класс Item, класс std :: allocator>> const &) "(? insert @? $ BinaryHeap @ V? $ Item @ V? $ basic_string @ DU? $ char_traits @ D @станд @@ V? $ распределитель @ D @ 2 @@ станд @@@@ В? $ Комп @ V? $ basic_string @ DU? $ char_traits @ D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@@@@@ QAEXABV? $ Item @ V? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @@ std @@@@@ Z), указанный в функции "public: void__thiscall PriorityQueue, класс std :: allocator>> :: insertItem (int, класс std :: basic_string, класс std :: allocator> const &) "(? insertItem @? $ PriorityQueue @ V? $ basic_string @ DU? $ char_traits @D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@@@ QAEXHABV? $ basic_string @ DU? $ char_traits @ D @ станд @@ V? $ распределитель @ D @ 2 @@ станд @@@ Z)

Код довольно длинный, однако, если вы хотите, чтобы я опубликовал его, я сделаю это.

спасибо

Ответы [ 3 ]

5 голосов
/ 18 апреля 2010

Это шаблонная функция, BinaryHeap<T, Comp>::insert(T const &). Ваш компилятор MSVC не поддерживает экспортируемые шаблоны (очень немногие делают). Убедитесь, что вы определили (не только объявили) эту функцию в файле заголовка, а не в файле .cpp.

3 голосов
/ 18 апреля 2010

Это говорит о том, что вы вызываете BinaryHeap::insert, но реализация этой функции не связана. У вас должны быть заголовочные файлы, иначе компилятор потерпит неудачу при попытке вызвать необъявленную функцию; Вы забыли связать библиотеку BinaryHeap?

2 голосов
/ 18 апреля 2010

Вы пытаетесь определить шаблонный класс BinaryHeap?Вы объявляете метод вставки в файле .h и определяете его в файле .cc?

Это не работает на большинстве компиляторов.Вам нужно определить функции шаблона, чтобы они были доступны во время компиляции, а не только во время компоновки.Переместите определение функции в файл заголовка.

...