LNK 1120:未解析的外部符号

时间:2014-08-28 03:12:12

标签: c++ compiler-errors

class mob;

class player
{
public:
    sf::RectangleShape rect;
    float bottom, left, right, top;
    player(sf::Vector2f position, sf::Vector2f size, sf::Color color);
    void update();
    void collision(mob M);
};

碰撞定义:

void player::collision(mob M)
{
    if(right < M.left)
        rect.setPosition(M.left, rect.getPosition().y);
}

我在之前的版本中使碰撞功能成为一个bool,因此它会返回true或false。好吧,在测试它作为一个bool后,我决定把它变成一个空白。但是,只要我将其设为无效,我就会收到此错误:

  

1&gt; main.obj:错误LNK2001:未解析的外部符号&#34; public:bool   __thiscall player :: collision(class mob)&#34; (?碰撞@ @@玩家@@@ QAE_NVmob Z)

     

1&gt; C:\ SFML_Project \ Release \ SFML_Project.exe:致命错误LNK1120:1   未解决的外部因素

此外,如有必要,您可以在此处找到声明:

int main()
{

    sf::RenderWindow Window;
    Window.create(sf::VideoMode(800,600),"SFML Project");

    player Cplayer(sf::Vector2f(10,10), sf::Vector2f(32,32), sf::Color::Red);

    mob Cmob(sf::Vector2f(368,284), sf::Vector2f(64,32), sf::Color::Blue);

    Window.setKeyRepeatEnabled(true);

    while(Window.isOpen())
    {
        sf::Event Event;
        while(Window.pollEvent(Event))
        {
            switch(Event.type)
            {
            case sf::Event::Closed:
                Window.close();
                break;
            /*case sf::Event::LostFocus:
                std::cout << "Window lost focus!" << std::endl;
                break;*/
            }
        }

            if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            {
                Cplayer.rect.move(0, -0.2);
            }
            else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            {
                Cplayer.rect.move(0, 0.2);
            }
            else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            {
                Cplayer.rect.move(0.2, 0);
            }
            else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            {
                Cplayer.rect.move(-0.2, 0);
            }

        Cplayer.update();
        Cmob.update();

        Cplayer.collision(Cmob);


        Window.draw(Cplayer.rect);
        Window.draw(Cmob.rect);
        Window.display();
        Window.clear();
    }
}

修改

似乎我的帖子已被标记为重复。这是一种不那么微妙的方式来转移举证责任。链接线程中的答案与我的问题无关,并且上下文在这里发生了巨大的变化。

1 个答案:

答案 0 :(得分:0)

最有可能的是,main.obj是针对较旧的player头文件构建的,因此它仍然引用返回void的方法的版本。链接器找不到此符号,因为player.obj文件不再包含它。

删除所有.obj文件(IDE中的&#34; clean&#34;命令应执行此操作)并重建以确保它使用更新的头文件中的信息。