6

コードをコンパイルすると、現在次のエラーが発生します。

エラー 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=%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);
     }
 }

}

私はかなり困惑しています。私は長い間このコードに取り組んでいなかったので、何が変更されてこれを引き起こしたのかわかりません。誰かが何か間違っていると思いますか?

4

2 に答える 2

6

最も可能性の高い原因は、 から作成されたオブジェクトにリンクしていないことですAgent.cpp

それがプロジェクトの一部であること、およびこの現在のコンパイラでコンパイルされた正しいバージョンを使用していることを確認する必要があります (しばらく触れていないと述べているため、オブジェクトがビルドされた可能性があります)。以前のバージョンのコンパイラでは、互換性がなくなる可能性があります (名前マングリング メソッドが異なるなど)。

最初に試すことは (すべての正しいファイルがプロジェクトにあることを確認したら)、完全なクリーン アンド ビルドです。

他のいくつかの点について:

  1. のソースがおそらく無関係であるWorld::processMouseことを意味するエラーが発生しています。GLView::processMouse

  2. printf私はあなたのと少しの混合を見つけますcout...邪魔です。printf本格的な C++ プログラミングでは、おそらく避けるべきです。動作しますが、主に従来の C サポートを対象としています。

于 2013-06-11T01:30:14.980 に答える
3

Visual Studio 2008 で同じ問題が発生しました。Clean に続いて Rebuild が機能しました。

于 2018-07-27T07:19:42.337 に答える