2016-05-12 6 views
0

Ich baue ein Programm und brauche eine Funktion, um zu überprüfen, ob sich die Maus auf einem Objekt befindet. Ich habe die Funktion geschrieben und eine neue .hpp-Datei erstellt, weil mehrere Dateien in meinem Projekt die Funktion verwenden. Die Datei heißt HitboxDetec.hpp. Die Funktion, die ich in sie geschrieben sieht wie folgt aus:LNK2005-Fehler beim Deklarieren einer Funktion in einer .hpp-Datei

bool isClicked(sf::Sprite* Sprite, sf::RenderWindow* pW) 
{ 
    int MOUSE_X = sf::Mouse::getPosition(*pW).x; 
    int MOUSE_Y = sf::Mouse::getPosition(*pW).y; 

    if (MOUSE_X >= Sprite->getPosition().x && 
     MOUSE_X <= Sprite->getPosition().x + Sprite->getPosition().x + 500 && 
     MOUSE_Y >= Sprite->getPosition().y && 
     MOUSE_Y <= Sprite->getPosition().y + Sprite->getPosition().y + 500) 
    { 
     return true; 
    } 
    else return false; 
} 

ich die benötigten Bibliotheken usw. aufgenommen werden und der Code funktioniert (ich es getestet, indem die Funktion in meinem CPP-Datei erklärt).

In meiner CPP-Datei enthalten ich den CookieDetec.hpp -Datei, und nannte es mit

if(isClicked(pSprite, pW)) {Stuff} 

Wenn ich mein Programm kompilieren, es gibt mir nur einen LNK2005-Fehler. Wie kann ich das beheben?

Antwort

2

LNK2005 ist für:

The given symbol, displayed in its decorated form, was multiply defined. 

, wenn Sie Ihre Funktion in Header-Datei definieren dann könnte es in mehreren Übersetzungseinheiten enthalten sein. Um mehrere Definitionen zu verhindern, markieren Sie diese Funktion als Inline:

inline bool isClicked(sf::Sprite* Sprite, sf::RenderWindow* pW) 
^^^^^^