Zwei bool haben true, aber if-block führt doch nicht aus

UncleBob

Mitglied
Habe hier ein sehr merkwürdiges kleines Problem. Eigentlich gehts nur um einen if-block der zwei Bool vergleicht, aber obwohl ich im compiler sehen kann das beide true sind, wird der anschliessende block doch nicht ausgeführt.

Der block selbst sieht so aus:

Code:
if (Reposte == MeleeSkills->SkillTrees[i].Technique[j].Guard)
{
//do some stuff
}

Guard ist ein bool typ der im struct LC_Techniques enthalten ist, das folgendermassen aussieht:

Code:
struct LC_Technique
{
	bool Guard;							
	int ID;								
	core::stringw Name;					
	core::stringw Description;				
	LC_CombatCondition YourCond;			
	LC_CombatCondition EnemyCond;			
	LC_CombatCondition YourResultCond;		
	LC_CombatCondition EnemyResultCond;	
	LC_Modifier SkillMod;					
	LC_Modifier AttackMod;					
	LC_Modifier DefMod;					
	int NumAdSkills;						
	int* AdSkills;							
	LC_Modifier MainSkills;					
	LC_Modifier OffSkills;					
	int AP;								
};

Reposte ist ein bool der in der klasse, die die funktion enthält, selbst definiert ist. Wie gesagt, wenn ich den Code bei der If-zeile anhalte, zeigt mir das Output fenster das beide variabeln true sind, aber der Block wird nicht ausgeführt. Wenn ich MeleeSkills->SkillTrees[i].Techniques[j].Guard mit einem anderen in der funktion selbst definierten Bool ersetze wird der Block ausgeführt, am Code selbst kanns also als solches nicht liegen. Ist das schon mal jemandem passiert, hat jemand eine Ahnung was die Ursache sein könnte?
Habe noch einen Screenshot angehängt falls die Sache ein bisschen zu unglaubwürdig scheint.
 

Anhänge

  • Output.jpg
    Output.jpg
    74,1 KB · Aufrufe: 11
Bist du mal mit dem Debugger Schritt für Schritt (F10 in Visual Studio standardmässig) durchgegangen? Wird der Block wirklich nicht ausgeführt? Hast du mal folgendes probiert:
C++:
std::cout << "Reposte: " << Reposte << " / " << MeleeSkills->SkillTrees[i].Technique[j].Guard << std::endl;
if(Reposte == ...)
{
   std::cout << "In the block" << std::endl;
   ...
}
std::cout << "After the block" << std::endl;

Manchmal ist es noch gut eine zweite "Meinung" neben dem Debugger einzuholen.

Gruss
Muepe
 
Auch nix. Allerdings habe ich jetzt beim weiterarbeiten bemerkt dass Guard zwar true ist, aber uninitialisiert, weil die Funktion fürs file einlesen einen Müllpointer zurückgibt... wahrscheinlich liegts daran, ich werds wissen sobald ich weiss wo der Pointer abhanden kommt... :/
 
Jap, daran hats gelegen... Womit ich in Zukunft weiss dass uninitialisierter Bool mehr als zwei Zustände haben kann, aber nur 0 als false betrachtet wird, und dass beim Vergleichen die Zustände direkt verglichen werden ohne erst interpretiert zu werden. Schätze die Lektion war der Mühe wert... :)

Trotzdem vielen Dank für die Antworten.
 
Zurück