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 :
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;
}
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.
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" ?