2009-07-18 8 views
1

J'ai essayé:Pourquoi est-ce que je ne peux pas mettre une constante dans un CGRectMake?

CGRectMake(0.0f, kFooBarHeight, 100.0f, 10.0f); 

je reçois une erreur unexpected ';' before ')' et too few arguments for CGRectMake. Lorsque je l'échange avec:

CGFloat foo = kFooBarHeight; 
CGRectMake(0.0f, foo, 100.0f, 10.0f); 

alors tout va bien. Les constantes ne sont-elles pas appropriées pour passer comme paramètres?

+1

Je suppose que personne ne peut vous dire ce qui se passe à moins d'inclure la définition de kFooBarHeight. –

+0

drôle. essayez de poster la définition de kFooBarHeight – IlDan

+0

pourquoi mettez-vous le 'f' après les constantes - quand j'utilise des constantes je n'inclue jamais le f ?? – zpesk

Répondre

15

Sans la définition de kFooBarHeight, il est impossible de donner une bonne réponse mais je suppose que vous avez défini kFooBarHeight en utilisant une définition de préprocesseur? Si oui, la meilleure estimation est que vous avez ajouté un point-virgule à la fin. Votre définition devrait ressembler à ceci: #define kFooBarHeight 10 mais vous avez défini comme: #define kFooBarHeight 10;.

Si ce que vous avez est la deuxième définition quand il a remplacé par le préprocesseur, vous obtenez:

CGRectMake(0.0f, 10;, 100.0f, 10.0f); 

C'est pourquoi votre deuxième exemple fonctionne correctement, il se développe à:

CGFloat foo = 10;; 
CGRectMake(0.0f, foo, 100.0f, 10.0f); 

Encore une fois, ce est juste une supposition éclairée, il est impossible de dire sans la définition réelle de kFooBarHeight.

+0

Vous avez tout à fait raison, j'ai eu un demi-lune là-bas! Bien deviné ;) – Thanks

3

Changer votre

#define kFooBarHeight 100; 

à

#define kFooBarHeight 100 

ne doivent pas être des points-virgules utilisé pour mettre fin à #defines sauf si vous savez avec certitude comment il sera utilisé.

Questions connexes