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 :

[Compilation] Erreur : "has no member named"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut [Compilation] Erreur : "has no member named"
    Bonjour,

    J'obtient une erreur à la compilation et pas moyen de savoir d'où elle provient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    navalBattle.c:9: error: expected ‘=’, ‘,’, ‘;’, ‘asmor ‘__attribute__’ before ‘tflotte’
    navalBattle.c:10: error: expected ‘=’, ‘,’, ‘;’, ‘asmor ‘__attribute__’ before ‘tocean’
    navalBattle.c:29: error: expected specifier-qualifier-list before ‘tocean’
    navalBattle.c:35: error: expected ‘)’ before ‘*’ token
    navalBattle.c:36: error: expected ‘)’ before ‘*’ token
    navalBattle.c: In function ‘init_game’:
    navalBattle.c:61: error: ‘profil’ has no member named ‘ocean’
    navalBattle.c:61: error: ‘profil’ has no member named ‘ocean’
    navalBattle.c:62: error: ‘profil’ has no member named ‘flotte’
    navalBattle.c:62: error: ‘profil’ has no member named ‘flotte’
    navalBattle.c:63: error: ‘profil’ has no member named ‘boatRemain’
    navalBattle.c:64: error: ‘profil’ has no member named ‘boatRemain’
    navalBattle.c: At top level:
    navalBattle.c:67: error: expected ‘)’ before ‘joueur’
    navalBattle.c:85: error: expected ‘)’ before ‘*’ token

    Merci

  2. #2
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Ta principale erreur se situe au niveau de tes typedef :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef boat[5] tflotte;
    typedef square[SIZE_O][SIZE_O] tocean;
    Où est déclaré le type boat ? square ?
    Il faut que tu le fasse avec un type connu.

  3. #3
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Ce sont des types personnalisés déclarés ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    typedef struct
     
    {
     
    	int etat;
     
    	boolean destroy;
     
    	boolean AI_aura;
     
    }square;
     
     
    typedef struct
     
    {
     
    	char nom[20];
     
    	int len;
     
    	int lenRemain;
     
    }boat;
    On ne pourrait pas déclaré des types avec des types personnalisés ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Les erreurs de type "has no member named ..." indique juste que lorsque vous faites une ligne de ce genre:
    Et que field1 n'a pas été déclaré dans la structure, alors on a cette erreur.
    Après, pour votre code, cela semble un tout petit peu plus compliqué surtout avec le genre de typedef que vous utilisez.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Oui, mais ils ne sont pas connus quand tu déclares tes structures. Tes typedef sont faux aussi.
    Grossomodo il faudrait que tu fasses comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    typedef int boolean;
     
    typedef struct
    {
      int etat;
      boolean destroy;
      boolean AI_aura;
    }square;
     
    typedef struct
    {
      char nom[20];
      int len;
      int lenRemain;
    }boat;
     
    typedef square tocean[SIZE_O][SIZE_O];
    typedef boat tflotte[5];
     
    typedef struct
    {
      tocean ocean;
      int boatRemain;
      tflotte flotte;
    }profil;

  6. #6
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Merci pour cette réponse, en fait j'avais déclaré mon tableau comme en java

    Vu que un problème n'est jamais seul me revoila en position délicate avec une jolie SEGFAULT

    Je dois bien avoué que vu que j'arrivais pas à m'en débarrasser j'ai essayer de changer plein de trucs mais en vain, je ne vois pas où j'accède là où je ne peux pas. Ca doit encore être une histoire de pointeurs mal mit tout ça et de mauvais passage de paramètre. Je poste le code,

    Encore merci

  7. #7
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Pointeur sur tableau, attention :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void init_ocean(tocean* joueur, tocean* ordi)
    {
      int i;
      for (i=0; i<SIZE_O; i++)
      {
        int j;
        for (j=0; j<SIZE_O; j++)
        {
          (*joueur)[i][j].etat = 0;
          (*joueur)[i][j].destroy = FALSE;
          (*joueur)[i][j].AI_aura = FALSE;
          (*ordi)[i][j].etat = 0;
          (*ordi)[i][j].destroy = FALSE;
          (*ordi)[i][j].AI_aura = FALSE;
        }
      }
    }

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    Bonjour,

    Il y a un bug dans les lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    joueur[i][j]->etat = 0;
    joueur[i][j]->destroy = FALSE;
    joueur[i][j]->AI_aura = FALSE;
    ordi[i][j]->etat = 0;
    ordi[i][j]->destroy = FALSE;
    ordi[i][j]->AI_aura = FALSE;
    En fait, c'est plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    (*joueur)[i][j].etat = 0;
    (*joueur)[i][j].destroy = FALSE;
    (*joueur)[i][j].AI_aura = FALSE;
    (*ordi)[i][j].etat = 0;
    (*ordi)[i][j].destroy = FALSE;
    (*ordi)[i][j].AI_aura = FALSE;
    mais bon, ça sert rien de passer tocean par pointeur dans la fonction init_ocean car un tableau est de base passé par pointeur lorsqu'il est argument d'une fonction.
    Tu peux donc écrire plus simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    void init_game(profil* gamer, profil* IA)
    {
        gamer->boatRemain = 0;
        init_ocean(gamer->ocean, IA->ocean);
        init_boat(&gamer->flotte, &IA->flotte);
        IA->boatRemain = 0;
    }
     
    void init_ocean(tocean joueur, tocean ordi)
    {
        int i;
        for (i=0; i<SIZE_O; i++)
        {
            int j;
            for (j=0; j<SIZE_O; j++)
            {
                joueur[i][j].etat = 0;
                joueur[i][j].destroy = FALSE;
                joueur[i][j].AI_aura = FALSE;
                ordi[i][j].etat = 0;
                ordi[i][j].destroy = FALSE;
                ordi[i][j].AI_aura = FALSE;
            }
        }
    }
    Il faut penser aussi à changer la déclaration d'init_ocean plus haut.

    Il y a peut-être des bugs ailleurs, je n'ai pas tout regardé.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 04/03/2015, 12h00
  2. [VB.NET] Compilation : erreur de copie de la dll
    Par necro dans le forum ASP.NET
    Réponses: 7
    Dernier message: 04/02/2004, 13h16
  3. Erreur: Control " has no parent windows
    Par bob8181_2000 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/10/2003, 20h39
  4. Réponses: 4
    Dernier message: 09/05/2003, 16h20
  5. [Modularite][Compilation]Erreur...
    Par miss8 dans le forum C
    Réponses: 3
    Dernier message: 06/01/2003, 01h07

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