链接器错误:“LNK2019:未解析的外部符号”

时间:2013-07-29 13:38:34

标签: c++ linker

我收到链接器错误,无法找出问题的根源。我希望你能帮帮我!创建类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文件

2 个答案:

答案 0 :(得分:1)

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

ClMyClass::ClMyClass(){
    //implementation
}

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

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

答案 1 :(得分:0)

在您的实现中,您尚未实现虚拟功能。如果使用虚函数,则必须实现所有虚拟函数,即使不使用它们也是如此。否则,链接器将出现您正在看到的未解决的符号错误。

如果某个类中没有使用某个函数,则不会出现错误,因为没有对该函数的引用。因此链接器不会看到它并且不会抱怨。对于虚函数,这是不同的,因为它们总是生成的。