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
    Membre habitué
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    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 averti 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 : 69
    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
    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

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    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 : 872
    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
    Membre habitué
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    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
    Membre habitué
    Homme Profil pro
    Physicien
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Physicien

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

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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);

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

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    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

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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).

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

    Informations professionnelles :
    Activité : Physicien

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    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