2010-06-03 10 views
1

Obtenir erreur: Type Incompatible dans l'attribution à fValue = ..., voir le codeType Incompatible dans l'attribution

static float t = 0;   
float d = .5;   
static float fValue = 0;   
fValue = [self easeOutBounce:t andB:0 andC:30 andD:d]; 

est ici la méthode

-(float) easeOutBounce:(float)t andB:(float)b andC:(float)c andD:(float)d { 
    if ((t/d) < (1/2.75)) { 
     return c*(7.5625*t*t) + b; 
    } else if (t < (2/2.75)) { 
     return c*(7.5625*(t-(1.5/2.75))*t + .75) + b; 
    } else if (t < (2.5/2.75)) { 
     return c*(7.5625*(t-(2.25/2.75))*t + .9375) + b; 
    } else { 
     return c*(7.5625*(t-(2.625/2.75))*t + .984375) + b; 
    } 
} 
+0

Je ne sais pas si elle est liée, mais ne sont pas vous manque un « * » dans les 2 dernières déclarations de retour? –

+0

La déclaration '@ interface' de cette classe contient-elle la méthode' easeOutBounce: andB: andC: andD: '? – dreamlax

+0

Veuillez publier la sortie complète du compilateur pour le fichier en question. Ma meilleure supposition est qu'il vous manque quelques autres avertissements, comme par exemple, le compilateur n'a pas vu la déclaration de la méthode donc il a supposé qu'il retourne l'ID. –

Répondre

1

Lorsque le compilateur rencontre une méthode inconnue (c'est-à-dire une méthode qui est utilisée mais qui n'a pas été déclarée dans un @interface, ou précédemment définie dans un @implementation), le compilateur émettra un avertissement et supposera que la méthode retourne id, qui est un type de pointeur, ce que vous pouvez ' t affecter à un type float.

Assurez-vous que votre @interface a la déclaration de votre méthode easeOutBounce:andB:andC:andD:, ou, à tout le moins, assurez-vous que cette méthode est définie ci-dessus le code qui l'utilise.

Par exemple:

@interface MyClass : NSObject 
{ 
    float myVar; 
} 
-(float) easeOutBounce:(float)t andB:(float)b andC:(float)c andD:(float)d; 
@end 
Questions connexes