【问题标题】:error LNK2019: unresolved external symbol "" referenced in function错误 LNK2019:函数中引用了无法解析的外部符号“”
【发布时间】:2013-06-06 18:40:15
【问题描述】:

我目前在编译代码时遇到以下错误:

错误 LNK2019:函数“public: void __thiscall World::processMouse(int,int,int, int)" (?processMouse@World@@QAEXHHHH@Z) World.obj

这是我的代码

代理.h:

class Agent
{
public:
    Agent();

void printSelf();

代理.cpp:

void Agent::printSelf()
{
printf("Agent species=%i\n", 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=%i\n", 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);
     }
 }

}

我很困惑。我很长时间没有处理这个代码了,所以我不确定是什么导致了这个。有人看出什么不对了吗?

【问题讨论】:

  • 您是否正在编译和链接cpp 文件?类定义是否有效?我没有看到任何右括号。
  • Visual Studio 不稳定。有时,“全部重建”可以解决问题,因为增量重新编译并没有重建它应该重建的东西。 makeAgent.cpp实际上是在项目中,而不仅仅是目录中的一个文件。
  • 请您发布 World::processMouse 代码吗?
  • 我添加了正确的 processMouse 方法

标签: c++ visual-c++ unresolved-external


【解决方案1】:

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

您应该检查以确保它是项目的一部分,并且您使用的是正确的版本,并且也是使用当前编译器编译的(由于您声明您有一段时间没有接触过它,可能是对象是使用较早的编译器版本构建的,可能会使它们不兼容 - 例如,不同的名称修饰方法)。

首先要尝试(一旦您确定所有正确的文件都在项目中)是完整的清理和构建。

关于其他几点:

  1. World::processMouse 中出现错误,这意味着GLView::processMouse 的来源可能无关紧要。

  2. 我发现您将printfcout 混合在一起有点……令人不安。对于严肃的 C++ 编程,您可能应该避免使用 printf。它可以工作,但主要用于旧版 C 支持。

【讨论】:

  • 清洁和重建让我感到惊讶,因为我以为我已经尝试过了。谢谢!
【解决方案2】:

在 Visual Studio 2008 中观察到相同的问题。 Clean,然后是 Rebuild 对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多