Erreur bizarre...

FloFlo Membre
septembre 2008 modifié dans API AppKit #1
Salut à  tous,

j'ai une petite erreur bizarre que je n'arrive pas à  m'expliquer, je fais une classe toute conne:
<br />#import &lt;Cocoa/Cocoa.h&gt;<br />#import &quot;ITAppDelegate.h&quot;<br /><br /><br />@interface ITWindowController : NSWindowController <br />{	<br />	IBOutlet NSOutlineView *outlineView;<br />	<br />	ITAppDelegate *appDelegate;<br />}<br />


Et là , j'ai une magnifique erreur du compilo :
Line Location ITWindowController.h:15: error: syntax error before 'ITAppDelegate'

J'ai fais des tests et je peux déclarer n'importe quelle variable d'instance quelle soit issue d'une custom class ou pas, seul la déclaration ITAppDelegate *appDelegate ne marche pas :'(

Je trouve ça aberrant, d'autant plus que pour le compilo il s'agit d'une erreur de syntax et donc non liée à  l'importation du fichier de la class ITAppDelegate (qui elle se compile parfaitement)...

Aurais-je raté quelque chose ?

Merci d'avance pour vos réponses.

Réponses

  • Philippe49Philippe49 Membre
    13:32 modifié #2
    Et si tu mets en commentaire la ligne  ITAppDelegate * appDelegate; ça le fait toujours ?
  • FloFlo Membre
    13:32 modifié #3
    Ben non justement... ya vraiment que cette ligne là  qui plante :crackboom:-
  • Philippe49Philippe49 Membre
    13:32 modifié #4
    Sort ITAppDelegate.h et ITAppDelegate.m  du projet (copie sur le bureau et suppression dans le projet)
    Essaye de faire un Add > Existing Files ... avec ITAppDelegate.h et ITAppDelegate.m 

    Reessaye la compilation
  • FloFlo Membre
    13:32 modifié #5
    ça ne marche toujours pas  B)
  • Philippe49Philippe49 Membre
    13:32 modifié #6
    C'est de l'étrange de chez bizarre ... ou alors on n'est pas réveillé ...

    Si tu as fait un copier-coller pour ce code, il se peut que des caractères spéciaux invisibles viennent perturber le code ...
    Colle-copie dans textEdit en mode Texte, et fait la démarche inverse ...
  • FloFlo Membre
    13:32 modifié #7
    A priori, aucuns caractères spéciaux cachées dans le texte... J'ai tout passé sous TextEdit en mode texte puis tout recollé, aucunes différences ???

    Je commence à  me demander si j'ai bien les idées claires...
  • Philippe49Philippe49 Membre
    13:32 modifié #8
    A part une erreur de syntaxe dans le fichier ITAppDelegate.h , je ne vois pas non plus ce qui pourrait créer ce refus.

    Et avec @class ; ITAppDelegate; au lieu du #import "ITAppDelegate.h" , des fois qu'il y ait des problèmes de références croisées ?
  • FloFlo Membre
    13:32 modifié #9
    ça donne 6 erreurs :

    /Users/Flo/iTrade/ITWindowController.h:6: error: syntax error before 'AT_NAME' token
    /Users/Flo/iTrade/ITWindowController.h:11: error: syntax error before '}' token
    /Users/Flo/iTrade/ITWindowController.h:13: fatal error: method definition not in @implementation context

    /Users/Flo/iTrade/ITWindowController.h:6: error: syntax error before 'AT_NAME' token
    /Users/Flo/iTrade/ITWindowController.h:11: error: syntax error before '}' token
    /Users/Flo/iTrade/ITWindowController.h:13: fatal error: method definition not in @implementation context

    Visiblement, il n'apprécie pas le @class, ou faillait-il mettre autre chose ?

  • Philippe49Philippe49 Membre
    septembre 2008 modifié #10
    Non au contraire, c'est intéressant.

    Le @class ITAppDelegate; ne fait que déclarer : "il existe une classe ITAppDelegate" ce qui est suffisant pour ton interface. Il faut naturellement mettre le #import "ITAppDelegate.h" dans ITWindowController.m

    Là  maintenant les erreurs qu'ils montrent parlent d'autre chose

    method definition not in @implementation context
    Tu as du mettre le code d'une méthode où il ne faut pas (la bonne place est entre @implementation et @end dans le .m)

    error: syntax error before 'AT_NAME' token
    Souvent lié à  de mauvais parenthésages, ou un @end mal placé ou doublé ...

  • FloFlo Membre
    13:32 modifié #11
    Les méthodes sont toutes au bon endroit, j'ai vérifié en fermant tous les petits triangles sur la droite dans l'éditeur d'Xcode.

    Et puis pourquoi ces erreurs n'apparaà®traient qu'avec le @class et pas avec les import ?

    Pour moi ya un problème quand le compilo interprète le @class ce qui perturbe le reste du code et donc donne des erreurs de syntaxe ... non ?
  • FloFlo Membre
    13:32 modifié #12
    bizarre, le problème est le même quand je fais
    <br />#import &lt;Cocoa/Cocoa.h&gt;<br />#import &quot;ITWindowController.h&quot;<br /><br /><br />@interface ITAppDelegate : NSObject <br />{	<br />	ITWindowController *windowController;<br />}
    


    erreur
    /Users/Flo/iTrade/ITAppDelegate.h:21: error: syntax error before 'ITWindowController'

  • Philippe49Philippe49 Membre
    13:32 modifié #13
    Met @class ITWindowController; dans ITAppDelegate.h et le #import "ITWindowController.h" dans ITAppDelegate.m
    et vice et versa dans ITAppDelegate
  • Philippe49Philippe49 Membre
    13:32 modifié #14
    dans 1222286942:

    Pour moi ya un problème quand le compilo interprète le @class ce qui perturbe le reste du code et donc donne des erreurs de syntaxe ... non ?

    Non ce ne peut être cela.
    @class ITAppDelegate; se contente simplement de signaler au compilateur que la classe existe, et que la déclaration d'un ITAppDelegate ne pose aucun problème  . 
  • FloFlo Membre
    13:32 modifié #15
    ça marche  :adios!:

    mais je n'ai pas la moindre idée du pourquoi du comment  ;D

    comment se fait-il que ces deux indications soient nécessaires alors que dans mes programmes précédents, tous marchaient très bien sans ?

    En tout cas merci pour ton aide (encore une fois  ;) )
  • Philippe49Philippe49 Membre
    13:32 modifié #16
    C'est tout simple.
    Quand tu fait un #import fichierA dans un fichier B, cela inclut physiquement le texte du fichier A dans le fichier B.
    Mais si en plus tu fais #import fichierB dans le fichier A, tu inclus le fichier B dans A qui contient lui-même le fichier B, qui contient le fichier A, etc ... et il y un phénomène de boucle infinie impossible à  résoudre pour le compilateur.

    Alors qu'avec @class tu n'inclus rien du tout.

Connectez-vous ou Inscrivez-vous pour répondre.