错误 LNK2019:函数中引用未解析的外部符号" "

error LNK2019: unresolved external symbol "" referenced in function

本文关键字:符号 外部 LNK2019 函数 引用 错误      更新时间:2023-10-16

当我编译我的代码时,我目前得到以下错误:

错误LNK2019:未解析的外部符号"public: void __thiscall Agent::printSelf(void)"(?printSelf@Agent@@QAEXXZ)在函数"public: void __thiscall World::processMouse(int,int,int,int)"中引用(? processMouse@World@@QAEXHHHH@Z) World.obj

我的代码

Agent.h:

class Agent
{
public:
    Agent();
void printSelf();

Agent.cpp:

void Agent::printSelf()
{
printf("Agent species=%in", species);
for (int i=0;i<mutations.size();i++) {
    cout << mutations[i];
}
}

GLView.cpp:

void GLView::processMouse(int button, int state, int x, int y)
{
if(world->isDebug()) printf("MOUSE EVENT: button=%i state=%i x=%i y=%in", button, state, x, y);
if(button==0){
    int wx= (int) ((x-conf::WWIDTH/2)/scalemult-xtranslate);
    int wy= (int) ((y-conf::WHEIGHT/2)/scalemult-ytranslate);
    world->processMouse(button, state, wx, wy);
}
mousex=x; mousey=y;
downb[button]=1-state;
}

void World::processMouse(int button, int state, int x, int y)
{
 if (state==0) {        
     float mind=1e10;
     float mini=-1;
     float d;
     for (int i=0;i<agents.size();i++) {
         d= pow(x-agents[i].pos.x,2)+pow(y-agents[i].pos.y,2);
             if (d<mind) {
                 mind=d;
                 mini=i;
             }
         }
     if (mind<1000) {
         //toggle selection of this agent
         for (int i=0;i<agents.size();i++) {
            if(i!=mini) agents[i].selectflag=false;
         }
         agents[mini].selectflag= !agents[mini].selectflag;
         agents[mini].printSelf();
         setControl(false);
     }
 }

}

我很困惑。我没有在这段代码上工作了很长一段时间,所以我不确定是什么改变导致了这一点。有人发现什么不对劲吗?

最可能的原因是您没有链接从Agent.cpp创建的对象。

你应该检查确保它是项目的一部分,并且你使用的是正确的版本,也是用当前的编译器编译的(因为你说你有一段时间没有碰过它了,可能是这些对象是用早期的编译器版本构建的,可能会使它们不兼容——例如不同的名称混淆方法)。

要尝试的第一件事(一旦你已经在项目中建立了所有正确的文件)是一个完整的清理和构建。

关于其他几点:

  1. 错误发生在World::processMouse意味着GLView::processMouse的来源可能无关

  2. 我发现你的混合printfcout稍微…令人不安。对于严肃的c++编程,应该避免使用printf

在Visual studio 2008中观察到同样的问题。Clean,然后是Rebuild .

相关文章: