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 :

structure en variable globale


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut structure en variable globale
    Bonjour tout le monde,

    J'aimerai avoir des vecteurs (donc des structures en C) qui soient déclarées comme variables globales.

    Dans le fichier .h, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct vecteur
    {
        double x;                 // Coordonnees d'un vecteur sur x
        double y;                 // Coordonnees d'un vecteur sur y
        double z;                 // Coordonnees d'un vecteur sur z
    };
    typedef struct vecteur vecteur;
    Dans le .c, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vecteur x;
    x.x=1;x.y=0;x.z=0;
    Le problème est :
    'x' does not name a type
    J'ai essayé plusieurs solutions, comme :
    - tout mettre dans le .c
    - enlever l'astuce typedef
    - changer les noms vecteur et x en autre nom pour être sûr qu'ils ne soient pas déjà définis.
    - fouiller sur internet 1 000 ans

    Tout fonctionne lorsque ce code est dans le main().

    Quelqu'un pourrait-il m'aider s'il vous plaît ?

    Merci d'avance.

  2. #2
    Membre du Club Avatar de diesel83
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2014
    Messages : 57
    Points : 51
    Points
    51
    Par défaut
    Facile.

    Dans ton typedef, tu ne peux pas utiliser le même identificateur (vecteur) deux fois pour désigner deux choses différentes.

    Tu devrais écrire (par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct structure_vecteur
    {
        double x;                 // Coordonnees d'un vecteur sur x
        double y;                 // Coordonnees d'un vecteur sur y
        double z;                 // Coordonnees d'un vecteur sur z
    };
    typedef struct structure_vecteur vecteur;
    Jean-Marie
    Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.

  3. #3
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Ou encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct structure_vecteur
    {
        double x;                 // Coordonnees d'un vecteur sur x
        double y;                 // Coordonnees d'un vecteur sur y
        double z;                 // Coordonnees d'un vecteur sur z
    } vecteur;

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Merci
    Merci beaucoup Jean-Marie,

    J'ai effectué le changement, mais cela ne marche pas non plus. D'autant plus que si le code est dans le main(), cela fonctionne.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci aussi imperio, mais j'ai le même résultat.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    ton problème ce n'est pas vecteur, mais x.

    Tu peux avoir une variable, mais pas une instruction globale.
    Heureusement, il y a l'initialisation par bloc.

    Par contre, tu pourrais avoir une fonction qui retourne un vecteur (en C++, on parlerait de constructeur), que tu utiliserais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct vecteur {
        double x, y, z;
    } vecteur;
    vecteur make_vecteur3d(double x, double y, double z);
     
    vecteur g_vecteur_1 = {0,1,2};
    vecteur g_vecteur_2 = make_vecteur3d(0,1,2);
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci leternel,

    Ca marche parfaitement pour moi.

    Plus précisément, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vecteur g_vecteur_1 = {0,1,2};
    fonctionne.

    Mais les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vecteur make_vecteur3d(double x, double y, double z);
    vecteur g_vecteur_2 = make_vecteur3d(0,1,2);
    me paraissent bizarres en globale puisqu'il me paraît difficile d'utiliser des fonctions à l'extérieur du main().


    J'ai encore une question subsidiaire (subsidiaire car le code fonctionne déjà) :
    Je cite : "Tu peux avoir une variable, mais pas une instruction globale."
    Quand on fait en globale, n'est-ce pas à la fois la variable "int a" et l'instruction "a = 1;" ?

    Merci pour tout.

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Non, c'est une définition de variable avec valeur d'initialisation.

    Certes, concrêtement, une définition de variable (avec ou sans initialisation) est une instruction.
    Mais les seules instructions possibles au niveau le plus externe sont des déclarations ou des définitions (de variable ou de fonction).

    La deuxième syntaxe devrait être valable, mais je n'ai pas vérifié. (déclaration d'une fonction, et appel de celle-ci pour initialiser une variable).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup leternel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 28/02/2013, 19h33
  2. Structures, variables globales et GtkBuilder
    Par Kazujoshi dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 15/07/2010, 12h03
  3. Structure en variable globale : question de performance
    Par Merillym dans le forum Débuter
    Réponses: 4
    Dernier message: 28/01/2010, 16h06
  4. Des Structures comme variables Globales
    Par mr_samurai dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/01/2008, 19h27
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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