我到处搜索,似乎无法找到答案。显然没有人做过这样的事情。我正试图从用户那里得到输入。
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)”有效..
答案 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
没有正文。
关于您的代码的其他一些评论:
对于Windows消息,请避免使用if-else
树;使用switch-case
。它通常更快,而且更具可读性。
我从未见过像这样循环处理的消息。您的Windows Procedure(其功能通常缩写为WndProc
)应该处理所有Windows消息 - DispatchMessage
的全部目的是向该功能发送消息。