2016-03-20 4 views
-7

ich die folgende Fehlermeldung erhalten, wenn zum Vergleich zwei sf::RectangleShape Objekte versuchen:Kein Operator „==“ passt diese Operanden für sf :: RectangleShape

Kein Operator „==“ passt diese Operanden.

Sie können im folgenden Code sehen, dass beide Typen (snake und addsnakey[0]) sf::RectangleShape sind. Warum erhalte ich einen Compilerfehler, wenn ich versuche, zwei sf::RectangleShape zu vergleichen?

Unten ist der fehlerhafte Code. Ich habe einen Kommentar, wo der Fehler ist:

sf::RectangleShape snake; 

//increases size of the snake 
sf::RectangleShape addsnake() 
{ 
    sf::RectangleShape addsnake1; 
    addsnake1.setSize(sf::Vector2f(20, 25)); 
    addsnake1.setFillColor(sf::Color::Red); 
    addsnake1.setPosition(100, 100); 
    sf::RectangleShape addsnake2; 
    addsnake2.setSize(sf::Vector2f(20, 30)); 
    addsnake2.setFillColor(sf::Color::Red); 
    addsnake2.setPosition(100, 100); 
    sf::RectangleShape addsnake3; 
    addsnake3.setFillColor(sf::Color::Red); 
    addsnake3.setSize(sf::Vector2f(20, 35)); 
    addsnake3.setPosition(100, 100); 
    sf::RectangleShape addsnake4; 
    addsnake4.setSize(sf::Vector2f(20, 40)); 
    addsnake4.setFillColor(sf::Color::Red); 
    addsnake4.setPosition(100, 100); 
    sf::RectangleShape addsnakey[4] = { addsnake1, addsnake2, addsnake3, addsnake4 }; 
    if (snake == snake) //problem here (No operator "==" matches these operands) 
     return addsnakey[0]; 
    else if (snake == addsnakey[0]) 
     return addsnakey[1]; 
    else if (snake == addsnakey[1]) 
     return addsnakey[2]; 
    else if (snake == addsnakey[2]) 
     return addsnakey[3]; 
    else if (snake == addsnakey[3]) 
     return addsnakey[4]; 
} 
+3

Der Code Unsinn ist sowieso: 'if (a == a)' 'Wie kann snake' nicht gleich' snake'? – John3136

+0

Erwarten Sie, dass die Leute raten, welche einzelne Zeile unter den Code-Seiten, die Sie gepostet haben, zu dem Kompilierungsfehler führt? –

+0

Ich hatte einen Kommentar hinzugefügt. Es ist nicht weit drinnen. Es ist in der ersten Funktion im Code. – Luna

Antwort

1

Es gibt keinen Gleichheitsoperator für die sf::RectangleShape Klasse definiert ist. Sie müssen einen erstellen und genau entscheiden, welche Eigenschaften die Gleichheit bestimmen.

Vielleicht sind Größe und Position wichtig. So können Sie die folgende Funktion definieren:

bool operator==(const sf::RectangleShape & a, const sf::RectangleShape & b) 
{ 
    return a.getSize() == b.getSize() && a.getPosition() == b.getPosition(); 
} 

Dies würde in Ordnung sein, weil sowohl die getSize und getPosition Member-Funktionen ein Vector2f zurück, die tut einen Gleichheitsoperator haben. Sie könnten sich auch ungefähr um getScale kümmern.

Natürlich liegt es an Ihnen zu bestimmen, was Gleichheit ausmacht. Das Fehlen eines Gleichheitsoperators auf der sf::RectangleShape ist nicht überraschend, da es viel tut, einschließlich Texturierung usw. Es ist offensichtlich nicht die Art von Sache, die Sie erwarten, mit anderen Objekten zu vergleichen.

Siehe Reference for sf::Vector2f

+0

Vielen Dank! :) – Luna

+0

BIG WARNING: 'sf :: Vector2f's Gleichheitsoperator berücksichtigt ** nicht ** Fließkomma-Ungenauigkeiten! Sie sollten diesen Code nicht verwenden. – Hiura