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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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