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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 71
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    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.

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