【问题标题】:Linker error: "LNK2019: Unresolved external symbol" [duplicate]链接器错误:“LNK2019:未解析的外部符号”[重复]
【发布时间】:2013-07-29 13:38:34
【问题描述】:

我收到链接器错误,无法确定问题的根源。我希望你可以帮助我!在创建ClMyClass类的对象时已经出现该错误。

两个错误:

Error   18  error LNK2019: unresolved external symbol "public: virtual __thiscall ClMyClass::~ClMyClass(void)" (??1ClMyClass@@UAE@XZ) referenced in function "void __cdecl Test1(void)" (?Test1@@YAXXZ)

Error   19  error LNK2019: unresolved external symbol "public: __thiscall ClMyClass::ClMyClass(void)" (??0ClMyClass@@QAE@XZ) referenced in function "void __cdecl Test1(void)" (?Test1@@YAXXZ)  


//Test.cpp
#include "StdAfx.h"
#include "MyClass.hpp"

void Test1(){

 ClMyClass oHandle;
}

//ClMyClass.hpp

class ClMyClass: public ClMyClassBase
{
public: 
    ClMyClass(void);
    virtual ~ClMyClass(void);

//methods...

}


//ClMyClass.cpp

ClMyClass::ClMyClass(void):ClMyClassBase(),m_nCallbackError(ERROR_NOT_INITIALIZED), m_eState(eUnknown)
{   
    //initialize members
}

ClMyClass::~ClMyClass(void)
{
    Unassign();
}

编辑:添加 .cpp 文件

【问题讨论】:

  • 您需要定义编译器抱怨的两个函数:ClMyClass~ClMyClass。声明它们而不实现它们通常会导致这种错误。
  • @Nbr44 但这些是标准的构造函数和解构函数。我认为他们不需要定义?
  • @Borgleader 这是一个非常糟糕的副本。下次在您的搜索条件中加入 [c++-faq]?
  • @sehe 我用了相关的问题列表,我没有搜索
  • @tzippy 从您编写原型的那一刻起,他们就不再是“标准”ctor 和 dtor。只有当您声明它们时,默认值才会出现。如果这样做,您也有责任定义它们。

标签: c++ linker


【解决方案1】:

您尚未定义您在类ClMyClass 中声明的构造函数和析构函数。

ClMyClass::ClMyClass(){
    //implementation
}

ClMyClass::~ClMyClass(){
    //implementation
}

这通常在一个单独的 .cpp 文件中完成,该文件包含所有类的成员函数的实现。

【讨论】:

  • 对不起,我完全忘了包含 .cpp 文件。它存在并且具有构造函数和解构函数的定义!
  • @tzippy 您的链接器所说的是“我知道有两个函数(ctor 和 dtor),它们已被声明,但我找不到它们的实现”
  • 对不起,如果我不清楚,但它们实际上是在 cpp 文件中定义的。刚刚添加到我的帖子中。
【解决方案2】:

在您的实现中,您还没有实现虚函数。如果你使用虚函数,那么你必须实现所有的虚函数,即使你不使用它们。否则链接器将出现您所看到的未解决的符号错误。

如果一个函数没有在一个类中使用,那么就不会出错,因为没有对这个函数的引用。因此链接器不会看到它并且不会抱怨。对于虚函数,这是不同的,因为它们总是被生成的。

【讨论】:

  • 其实有一个实施文件。我将它添加到我的帖子中。对不起。但我当然仍然得到错误。
猜你喜欢
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2023-03-28
  • 2021-04-30
  • 2012-10-31
相关资源
最近更新 更多