Bonjour,
J'ai un soucis sur une comparaison entre deux unsigned char qui me donne des résultats inattendu.
Pour commencer, voici le code fautif :
Ici, this->map est de type : unsigned char* tandis que this->Blocked est de type unsigned char et vaut 0. La variable map contient uniquement des 0 ou des 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 bool RectangleMap::contain(const int x, const int y) const { int pos = this->toFlattenIdx(x, y); if( pos < 0 || pos >= this->length ) return false; std::cout << pos << " -> " << this->map[pos] << " and we don't want " << static_cast<unsigned>(this->Blocked) << std::endl; if( this->map[pos] == this->Blocked ) { std::cout << "Good!" << std::endl; return false; } std::cout << pos << " -> " << this->map[pos] << " Nieh!?!" << std::endl; return true; }
La fonction int toFlattenIdx(const int x, const int y) const prend deux coordonnées x et y et me renvoie l'indice correspondant dans le tableau aplati (map en l'occurence).
Les cout sont là pour déboguer.
Mon problème avec ce code, c'est que this->map[pos] == this->Blocked est tout le temps faux, même lorsque map[pos] vaut 0 (et est donc égale à Blocked).
Je ne comprend pas pourquoi. Les deux variables sont du même type, donc il n'y a pas de cast implicite qui pourrais intervenir....
Quelqu'un a t'il une idée ?
PS : y a t'il moyen d'utiliser la balise de code en mode "inline" ?
Partager