2012-06-13 1 views
5

Screenshots« Vous ne trouvez pas la déclaration d'interface pour <class> »

Je vais avoir un temps assez difficile la mise en place d'une catégorie sur une classe que j'ai fait. D'après ce que j'ai lu, Objective-C vous permet de créer une catégorie sur n'importe quelle classe, pas seulement les classes fermées. (Honnêtement, cela n'aurait aucun sens.)

Bien sûr, je peux ajouter les messages de catégorie au fichier de classe réel, mais je veux les garder séparés (comme la catégorie est une utilisation inhabituellement spéciale d'une classe cela peut être utilisé très généralement). Je veux partager la classe, mais garder la catégorie privée ... de toute façon.

J'ai dépouillé la catégorie pour montrer juste le problème à portée de main. J'ai (actuellement) quatre erreurs sur le message de la première catégorie. Le nombre d'erreurs que je reçois sur cette ligne est directement proportionnel au nombre de références, mais ce n'est pas une augmentation régulière. Est-ce que quelqu'un sait ce qui pourrait causer cela?

+0

Ce que vous avez écrit me semble correct. J'ai fait des choses similaires dans mon code. Ma conjecture est que c'est peut-être un autre problème qui perturbe le compilateur. Est-ce que "ByteCollection.h" a un @end correct, par exemple? Ou y a-t-il quelque chose d'autre qui pourrait être faux avec "ByteCollection.h" ou quoi que ce soit? – user1118321

+0

Pas que je puisse voir; Xcode ne signale rien et j'implémente toute l'interface. Qu'est-ce qui dicte exactement un «bon @end»? –

+3

Une autre possibilité est que le compilateur ne trouve pas "ByteCollection.h" lorsque vous l'importez. Si ce fichier se trouve dans un dossier différent (dans le système de fichiers, pas dans les «groupes» de dossiers jaunes de Xcode), vous devrez peut-être configurer des chemins de recherche dans les paramètres du projet afin qu'il puisse être trouvé. – rickster

Répondre

6

Votre fichier Resources.h, importé par ByteCollection.h, importe ByteCollection + words.h. Ainsi, lorsque ByteCollection + words.h importe ByteCollection.h, cela entraîne une dépendance circulaire †. Le moyen le plus simple de rompre une dépendance circulaire consiste à déplacer l'une des importations vers le fichier d'implémentation plutôt que vers l'en-tête. Il semble que cela devrait être possible avec Resources.h.

† Vous vous demandez peut-être pourquoi cela pose un problème si vous avez une dépendance circulaire? Eh bien, la directive #import contient littéralement le fichier que vous spécifiez, comme si vous copiez-collez. Il n'intègre pas un fichier deux fois intelligemment, car cela créerait du code en double. Mais cela signifie que lorsque le fichier A dit "Je veux que le fichier B soit devant moi" et que le fichier B indique "Je veux que le fichier A soit devant moi", l'un d'eux va être déçu, ce qui entraîne des erreurs comme celle vous arrivez ici.

+0

Oui, ça importe 'ByteCollection + Words.h', mais j'ai déjà eu des problèmes avec l'inclusion circulaire et je ne me gratterai plus jamais la tête pour cette erreur! XD Il n'y a pas de problèmes d'inclusion circulaires. Je n'importe même jamais 'Resources.h' n'importe où dans mes fichiers source. (Utilisé pour, mais pas plus.) J'ai même commenté l'importation spécifique pour une bonne mesure sans effet. Merci bien :) –

Questions connexes