IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

unknown type name


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut unknown type name
    Bonjour à vous,
    Je délare une structure en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct
    {
    	char key[SDLK_LAST];
    	int mousex,mousey;
    	int mousexrel,mouseyrel;
    	char mousebuttons[8];
    	char quit;
    } Input;
    mais j'ai une erreur dans une fonction qui l'utilise
    voici son prototype :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void UpdateEvents(Input* in);
    et GCC me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UpdateEvents.c|1|erreur: unknown type name ‘Input’|
    pourtant je peux déclarer "Input in" ou "Input* in" dans le main sans erreur.

    merci à vous.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonsoir,

    • Dans quel fichier déclares-tu ta structure et à quel endroit ?
    • Est-ce que ta fonction est définie dans un fichier distinct de celui qui contient « main() » ?


    Si tu fais de la compilation séparée, chaque fichier *.c est compilé de manière complètement indépendante des autres, et c'est une fois les fichiers objet produits qu'ils sont rassemblés entre eux par l'éditeur de liens. Ça veut dire que chaque fichier *.c doit disposer de sa propre déclaration de structure et c'est pour cela qu'on met généralement celle-ci dans un *.h.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    j'ai structures.h main.c et update.c
    main inclue strctures.h puis update.c
    mais mêm quand je remplace la ligne update.c par le contenue de update.c cela ne fonctionne pas

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par dergeekpanda Voir le message
    j'ai structures.h main.c et update.c
    main inclue strctures.h puis update.c
    « main » inclut « update.c » ?? Tu fais des #include de fichiers *.c ?
    C'est mal !

    mais mêm quand je remplace la ligne update.c par le contenue de update.c cela ne fonctionne pas
    Tu dois probablement faire tes includes en tête de fichier, ce qui est une bonne chose. Mais si tu inclus du code directement dans celui de main.c, alors le code de include.c se retrouve inséré AVANT la déclaration de ta structure. Donc le compilo te dit qu'il ne connait pas, ce qui est normal.

    Peux-tu nous montrer ton code ici même ? (En utilisant les balises [code] et [/code]).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    Points : 38
    Points
    38
    Par défaut
    Non le problème s'est résolu tout seul (comme à chaque fois que je post sur un forum) je ne sais pas ce que j'ai bidouillé entre toutes mes inclusions mais en enlevant l'include de .c tout fonctionne...
    Tant mieux au fond...

    Merci à toi Obsidian pour cette aide et passe une bonne nuit

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par dergeekpanda Voir le message
    Non le problème s'est résolu tout seul (comme à chaque fois que je post sur un forum) je ne sais pas ce que j'ai bidouillé entre toutes mes inclusions mais en enlevant l'include de .c tout fonctionne...
    Donc, il ne s'est pas résolu, en fait. :-)

    Tant mieux au fond...
    Pas vraiment. Si tu ne sais pas ce que tu fais, tu n'as aucune garantie que ton programme fonctionne correctement, même s'il en a l'air, ni que le bug ne puisse resurgir au moment où tu t'y attendras le moins, spécialement si tu portes ton programme sur une autre machine.

    D'une manière générale, ne fais jamais de #include<> de fichiers *.c. C'est une très mauvaise conception. Ton bug s'est probablement « résolu » de lui-même soit parce qu'en fait, tu faisais déjà de la compilation séparée et que ta déclaration était déjà dans un *.h (reste à voir), soit parce que tu as inversé quelques lignes quelque part, ce qui fait que la déclaration se retrouve maintenant en amont de la ligne concernée plutôt qu'en aval.

    Très bientôt, tu vas faire face aux conflits des déclarations multiples, tu vas devoir apprendre à mettre des gardes dans tes headers pour les éviter, etc.

    Merci à toi Obsidian pour cette aide et passe une bonne nuit
    À ton service.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut
    Citation Envoyé par Obsidian Voir le message
    Donc, il ne s'est pas résolu, en fait. :-)
    Ben, en fait, si...

    tu sembles avoir zappé la partie
    mais en enlevant l'include de .c
    Il est clair que, si un fichier d'implémentation est inclu, ca va beaucoup plus mal, mais que dés qu'on supprime cette inclusion, ca passe tout de suite bien mieux
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Hello,

    Citation Envoyé par koala01 Voir le message
    Salut Ben, en fait, si...

    tu sembles avoir zappé la partieIl est clair que, si un fichier d'implémentation est inclu, ca va beaucoup plus mal, mais que dés qu'on supprime cette inclusion, ca passe tout de suite bien mieux
    Je suppose que ton message était à prendre au second degré mais malgré cela, toi comme moi, on sait qu'un problème n'est pas « résolu » quand il a disparu de lui-même mais seulement quand on l'a identifié.

    Ici, le PO le reconnaît bien volontiers ce qui est déjà beaucoup (combien de fois on a lu des choses du style « j'ai résolu le problème en lançant le programme en root, et maintenant il ne plante plus »), mais il reste nécessaire d'insister dessus, surtout s'il débute.

Discussions similaires

  1. [C++ Error] mstv.h(53): E2303 Type name expected
    Par cecileWaseda dans le forum C++Builder
    Réponses: 11
    Dernier message: 05/04/2014, 14h31
  2. erreur: unknown type name
    Par missDii dans le forum Débuter
    Réponses: 2
    Dernier message: 18/12/2013, 08h37
  3. erreur: unknown type name ‘GtkCssProvider’
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 12/11/2013, 16h05
  4. [Objective-C] unknown type name 'QTVisualContextRef'
    Par Miscellaneous dans le forum Objective-C
    Réponses: 0
    Dernier message: 26/03/2011, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo