我在编译代码时遇到以下错误:
错误LNK2019:函数“public:void __thiscall World :: processMouse(int,int,int,in,in, int)“(?processMouse @ World @@ QAEXHHHH @ Z)World.obj
这是我的代码
Agent.h:
class Agent
{
public:
Agent();
void printSelf();
Agent.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);
}
}
}
我很难过。我很长一段时间没有处理过这段代码,所以我不确定是什么原因引起了这种情况。有人看错了吗?
答案 0 :(得分:4)
最有可能的原因是您没有链接从Agent.cpp
创建的对象。
您应该检查以确保它是项目的一部分,并且您正在使用正确的版本,也使用当前编译器编译(因为您声明您暂时没有触及它,可能是对象是使用早期的编译器版本构建的,可能使它们不兼容 - 例如,不同的名称修改方法。)
尝试的第一件事(一旦你在项目中建立了所有正确的文件)就是一个完整的清理和构建。
关于其他几点:
错误发生在World::processMouse
,意味着GLView::processMouse
的来源可能无关紧要。
我发现你printf
和cout
混合了......令人不安。对于严肃的C ++编程,您应该避免使用printf
。它可以工作,但它主要用于传统的C支持。
答案 1 :(得分:1)
在Visual Studio 2008中观察到相同的问题。 清理,然后进行重建对我有用。