LNK2019:在WinMain中调用函数

时间:2014-02-04 20:55:37

标签: c++

我到处搜索,似乎无法找到答案。显然没有人做过这样的事情。我正试图从用户那里得到输入。

while(!done)
{
    PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE);
    if (msg.message == WM_QUIT) {
        done = true; //if found, quit app
    } else if (msg.message == WM_KEYDOWN) {
        game->KeyDown(msg.wParam);
    } else if (msg.message == WM_KEYUP) {
        game->KeyUp(msg.wParam);
    } else {
        /*  Translate and dispatch to event queue*/
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
return msg.wParam;

当我运行它时,它给出了错误:

error LNK2019: unresolved external symbol "public: void __thiscall Game::KeyDown(unsigned int &)" (?KeyDown@Game@@QAEXAAI@Z) referenced in function _WinMain@16

我在游戏类的标题中定义了所有内容...它的子系统设置为空,但“(/ SUBSYSTEM:WINDOWS)”有效..

1 个答案:

答案 0 :(得分:4)

一块蛋糕。 “未解析的外部符号”最常见的意思是您声明了一个函数而没有指定它的作用。请考虑以下示例:

void undefined();
void LNK2019()
{
   undefined(); //the offending line
}
void main()
{
    //doesn't even have to do anything; it's not a runtime error
}

函数LNK2019()调用undefined(),但您从未告诉undefined()该怎么做。您的链接器不知道该行的内容。在您的具体情况下,我打赌Game::KeyDown没有正文。

关于您的代码的其他一些评论:

  1. 对于Windows消息,请避免使用if-else树;使用switch-case。它通常更快,而且更具可读性。

  2. 我从未见过像这样循环处理的消息。您的Windows Procedure(其功能通常缩写为WndProc)应该处理所有Windows消息 - DispatchMessage的全部目的是向该功能发送消息。