未解决的外部符号

时间:2010-04-18 02:12:06

标签: c++ linker-errors unresolved-external

我收到链接错误,我不确定它的含义。

这是错误

  

1> Main.obj:错误LNK2019:未解析的外部符号“public:void __thiscall BinaryHeap,class std :: allocator>&gt ;, class Comp,class std :: allocator>>> :: insert( class item,class std :: allocator>> const&)“(?insert @?$ BinaryHeap @ V?$ Item @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ d @ 2 @@性病@@@@ V'$ @比较V'$ @的basic_string杜?$ @ 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,class std :: allocator”中引用>> :: insertItem(int,class std :: basic_string,class std :: allocator> const&)“(?insertItem @?$ PriorityQueue @ V?$ basic_string @ DU?$ char_traits @ D @ std @ @V?$分配器@ d @ @@ 2 STD @@@@ QAEXHABV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ Z)

代码相当长,但是如果你想让我发帖,我会。

感谢

3 个答案:

答案 0 :(得分:5)

这是一个模板函数BinaryHeap<T, Comp>::insert(T const &)。您的MSVC编译器不支持可导出的模板(很少有)。确保在头文件中定义(而不是仅声明)此函数,而不是.cpp文件。

答案 1 :(得分:3)

它说你正在调用BinaryHeap::insert但是没有链接到该函数的实现。你必须有头文件或编译器在你试图调用未声明的函数时会失败;你忘了链接BinaryHeap库吗?

答案 2 :(得分:2)

您是否尝试定义模板化的BinaryHeap类?您是否在.h文件中声明insert方法并在.cc文件中定义它?

这对大多数编译器都不起作用。您需要定义模板函数,以便它们在编译时可用,而不仅仅是链接时间。将函数定义移动到头文件。