“On attend un type” d'erreur de pointage pour le type de retour d'une méthode
J'ai tenté de compiler, mais à chaque fois que je le fais, une méthode lève une étrange "attendu un type d'erreur". J'ai une méthode dans l'en-tête:
-(ANObject *)generateSomethingForSomethingElse:(NSString *)somethingElse;
L'erreur de points au type de retour de cette méthode. J'ai importé ANObject
dans l'en-tête à l'aide de #import "ANObject.h"
et ANObject
est la compilation de bien..
Pourquoi est-ce arrivé?
- semble être bien.. pouvez-vous poster une partie de votre code?
- aussi ... est ANObject partie d'un autre cadre?
- Merci d'éditer votre question à inclure à la fois le contenu de ANObject.h et la tête, qui est de vous donner le problème. Et s'il vous plaît montrer votre code, pas fait de code qui peuvent ne pas comprendre le problème.
Vous devez vous connecter pour publier un commentaire.
C'est de l'ordre de la source, les fichiers sont compilés dans. Vous êtes probablement déjà au courant que vous ne pouvez pas appeler une méthode avant de elle est définie (voir ci-dessous le pseudo-code):
Ce serait la cause d'une erreur de compilation car someMethod() n'a pas encore été défini. La même chose est vraie de classes. Les Classes sont compilés les uns après les autres par le compilateur.
Donc, si vous imaginez toutes les classes de la mettre dans un géant de fichier avant la compilation, vous pourriez être en mesure de voir le problème. Regardons les
Ship
etBoatYard
classe:Une fois de plus, parce que le
Ship
classe n'a pas encore été défini, nous ne pouvons pas nous référer encore. La résolution de ce problème particulier est assez simple; changer l'ordre de compilation et de les compiler. Je suis sûr que vous êtes familliar avec cet écran dans XCode:Mais êtes-vous conscient que vous pouvez faire glisser les fichiers vers le haut et vers le bas dans la liste? Cela change l'ordre dans lequel les fichiers seront compilés dans. Par conséquent, il suffit de déplacer le
Ship
classe au-dessus de laBoatYard
classe, et tout est bon.Mais, si vous ne voulez pas le faire, ou plus important encore, que si il y a une circulaire de la relation entre les deux objets? Nous allons augmenter la complexité du diagramme d'objets par l'ajout d'une référence à l'actuel
BoatYard
que leShip
est dans:Oh, maintenant nous avons un problème. Ces deux ne peuvent pas être compilé side-by-side. Nous avons besoin d'un moyen d'informer le compilateur que le Navire* classe existe bel et bien. Et c'est pourquoi le
@class
mot-clé est donc à portée de main.À mettre en d'autres termes, vous êtes en train de dire: "Croyez-moi, l'homme,
Ship
existe vraiment, et vous allez le voir très bientôt". Pour mettre tout cela ensemble:Maintenant que le compilateur sait qu'il compile
BoatYard
, qu'unShip
définition de la classe va bientôt apparaître. Bien sûr, si ce n'est pas, la compilation sera toujours réussir.Tous les
@class
mot clé n'est cependant informer le compilateur que la classe va bientôt venir. Il est pas un remplacement pour#import
. Vous devez importer le fichier d'en-tête, ou vous n'aurez pas accès à toute la classe internes:Cela ne peut pas fonctionner, et échoue avec un message d'erreur indiquant que le Navire est une déclaration anticipée. Une fois que vous
#import "Ship.h"
, alors vous serez en mesure de créer l'instance de l'objet.J'ai trouvé cette erreur hapenning lorsqu'il y a dépendance circulaire sur les en-têtes. Vérifiez si l' .h fichier où vous déclarer cette méthode est importé dans ANObject.h
En gros, vous ajoutez
avant @interface!
Si, pour une raison que je recevais cette erreur lors de la tentative de définir une méthode avec un type enum dans les paramètres. Comme:
J'avais déjà utilisé comme ça et jamais eu de problème, mais maintenant que j'ai fait. J'ai vérifié pour la dépendance circulaire et pourrait trouver aucun. J'ai aussi vérifié pour les fautes de frappe plusieurs fois et pas de dés. Ce qui fini par résoudre mon problème a été à l'ajout de 'enum' avant je voulais accéder à la variable. Comme:
Généralement, quand je vois une erreur comme ça c'est parce que j'ai une erreur sur une ligne précédente, comme un supplément ou une parenthèse manquante ou quelque chose.
Il peut paraître stupide, mais le mal bombardements ou de la mauvaise utilisation des majuscules/minuscules letterwrong cas présent.
J'ai eu ce message, lorsque le type de variable a été mal orthographié. Voir ci-dessous ci-dessous
par exemple
au lieu de.....
Curieusement, de changer l'ordre de mes importations a corrigé cela dans le passé... Essayez de déplacer l'importation vers le bas, après tous vos autres importations.