Ungültige Operanden für binäres
Habe ich eine Methode, um zu überprüfen, ob eine Zahl gerade oder ungerade ist:
-(BOOL)numberIsEven:(unsigned int *)x {
if (x & 1)
{
return TRUE;
}
else
{
return FALSE;
}
}
aber wenn ich es kompilieren erhalte ich die Fehlermeldung:
Invalid operands to binary %
Damit es kompiliert in der Montage als eine modulo-Funktion und Versagen, irgendwie, jedoch, wenn ich einen E-Modul-basierte Funktion (wohl langsamer) bekomme ich den gleichen Fehler!
Mir helfen, stack overflow
Dank -
Ollie
if (isTrue) { return true; } else { return false; }
Paradigma. Oh boy.- Abgesehen von allen anderen Fragen, wenn Sie den Fehler beheben, nicht dereferenzieren Sie den Zeiger, Ihre Methode name ist eigentlich Quatsch, da wird true zurückgegeben, wenn *x ist ungerade.
- Konnte Sie nach dem eigentlichen code und die Fehlermeldung? Das was du gepostet hast ist offensichtlich falsch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
x
ist ein Zeiger. Der modulo-operator wird nicht auf den Zeiger.Dieser dereferenziert den pointer, dann gibt das Ergebnis der modulo - (implictly Besetzung einer BOOL)
Ich vermute, Sie Lesen die Fehlermeldung falsch und es ist wirklich sagt "Ungültige Operanden für binäres &".
Der Grund, warum es sagt, dass "x" ist ein Zeiger, so dass Sie brauchen, um zu sagen:
nicht
Weil (abgesehen von der Tatsache, dass der code enthält zahlreiche Schreibfehler) x ist definiert als ein Zeiger. Ein Zeiger kann nicht E-Modul durchgeführt, ist das Ergebnis sinnlos ist.
Seit
x
ist ein Zeiger auf ein int, die Sie brauchen, um Rücksicht es zuerst.Alternativ können Sie ändern Sie die Signatur, um eine
unsigned int
. Ich sehe keinen Vorteil für die übergabe eines Zeigers in dieser situation.Abgesehen davon, dass das eigentlich C, so dass Sie nicht bekommen alles, was durch Umwandlung in bool.
Gut funktionieren.
bool isOdd(int x) { return !isEven(x); }
,bool isEven(int x) { return !isodd(x); }
=D