如何修复LNK2019未解析的外部符号

时间:2015-01-28 22:12:57

标签: c++

我有一个非常简单的线程类我正在用于一个项目。我刚刚开始取得进展,但我因为LNK2019错误而陷入困境,我无法弄清楚如何修复。我把问题缩小到一条线。也许有人可以帮我指导我需要做些什么来解决它。

以下是我正在上课:

#ifndef __THREADING_H
#define __THREADING_H

#include <Windows.h>

class Threading {

public:

    virtual void run() = 0;

    void start();
    void stop();

    bool isStopped();
    void cleanup();

private:
    bool stopped;
    HANDLE reference;
    static DWORD WINAPI start_helperfunction(LPVOID ptr);

};

#endif // __THREADING_H

我收到错误的行是start_helperfunction的第2行,下面是Threading::start_helperfunction

#include "Threading.h"

void Threading::start()
{
    stopped = false;
    reference = CreateThread(NULL, 0, Threading::start_helperfunction, this, NULL, NULL);
}

最后我得到的错误信息是:

error LNK2019: unresolved external symbol "private: static unsigned long __stdcall Threading::start_helperfunction(void *)" (?start_helperfunction@Threading@@CGKPAX@Z) referenced in function "public: void __thiscall Threading::start(void)" (?start@Threading@@QAEXXZ)

我不确定我做错了什么或尝试什么。我确定这是一个简单的修复。我不是C ++中最有经验的人。

1 个答案:

答案 0 :(得分:3)

您没有实现start_helperfunction,因此链接器无法找到它。您需要实际编写具有该名称的静态成员函数。最简单的可能是这样的:

DWORD WINAPI Threading::start_helperfunction(LPVOID ptr)
{
    return 0;
}