2014-08-28 121 views
-2
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); 
}; 

衝突定義:LNK 1120:解析外部符號

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

我做出了碰撞功能在以前的一個布爾值,建立這樣它會返回true或false。那麼,在測試它作爲一個布爾,我決定把它作爲一個空白。但是,只要我做了一個空隙,我得到這個錯誤:

1>main.obj : error LNK2001: unresolved external symbol "public: bool __thiscall player::collision(class mob)" ([email protected]@@[email protected]@@Z)

1>C:\SFML_Project\Release\SFML_Project.exe : fatal error LNK1120: 1 unresolved externals

而且,如果需要的話,你可以在這裏找到聲明:

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(); 
    } 
} 

編輯:

看來我的帖子已被標記爲重複。這是一個不那麼微妙的轉移舉證責任的方式。鏈接線程中的答案與我的問題沒有任何關係,並且環境在此處發生急劇變化。

+0

@ 0x499602d2 [所以我們仍在使用它?](http://meta.stackoverflow.com/questions/265806/should-regular-faq-style-answers-be-closed-as-too-broad) ;-) ... – 2014-08-28 03:29:15

+0

舉證責任實際上始終在OP上提出質量問題,社區將關閉/標記爲不符合現場標準的重複問題。儘管我願意相信你,但你的編輯只是聲稱*這些問題沒有關係,沒有提供任何實際的區別或澄清。如果你能幫助我理解爲什麼他們不同,我會很樂意投票重新開放。 – dimo414 2014-08-28 04:08:18

回答

0

最有可能的是,main.obj是針對較舊的player頭文件構建的,因此它仍然引用返回void的方法的版本。由於player.obj文件不再包含它,因此鏈接程序找不到此符號。

刪除所有.obj文件(IDE中的「clean」命令應執行此操作)並重建以確保它使用更新的頭文件中的信息。

+0

感謝您的回答!可悲的是,清潔或重建項目都不適合我。我可能應該在OP中提到我嘗試過。 – 2014-08-28 03:19:48

+0

@RunnyBabbit然後手動刪除構建輸出目錄。錯誤清楚地表明它正在尋找'void'方法。如果您在頭文件中的實現文件**和**中將其更改爲「bool」,那麼只要您從頭開始構建,就不會收到此構建錯誤。 – cdhowie 2014-08-28 04:37:35