【问题标题】:Unresolved External symbol未解析的外部符号
【发布时间】:2011-02-09 06:57:46
【问题描述】:

我收到一个链接错误,我不确定它指的是什么。

这是错误

1>Main.obj : error LNK2019: unresolved external symbol "public: void __thiscall BinaryHeap,class std::allocator > >,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@@std@@ @@V?$Comp@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@@@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,类 std::basic_string,类 std::allocator > const &)" (?insertItem@?$PriorityQueue@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std @@@@QAEXHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)

代码比较长,如果你想让我贴出来,我会的。

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您是否尝试定义模板化 BinaryHeap 类?你是在.h文件中声明插入方法,在.cc文件中定义?

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

      【讨论】:

        【解决方案3】:

        这是说您正在调用BinaryHeap::insert,但没有链接到该函数的实现。您必须有头文件,否则当您尝试调用未声明的函数时编译器会失败;您是否忘记链接 BinaryHeap 库?

        【讨论】:

          猜你喜欢
          • 2015-06-27
          • 2021-12-04
          • 2020-04-10
          • 2018-05-22
          • 2021-03-25
          • 2013-02-28
          相关资源
          最近更新 更多