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 :

erreur: expected primary-expression


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Points : 11
    Points
    11
    Par défaut erreur: expected primary-expression
    Bonjour,

    Voici mon problème en quelques lignes.

    Je reprend actuellement un projet dans mon entreprise qui a pour but de modifier le logiciel existant afin qu'il puisse s’exécuter sur une librairie à jour car il a été créer avec la librairie C++ STL SGI, qui n'est plus utilisée aujourd'hui.

    Voici mon bout de code posant problème, les points importants sont indiqués en gras

    LOG.CPP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _log(LS_MAIN,L_MSG,0,"main_tuxastart");
    LOG.H

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _log(section,type,level,msg,args...) if(checklog(section,type,level)){  __log_entry(section,type); fprintf(stdout,"%s\n",tuxlang[msg].c_str() ,  args );}
    TUXLANG.H

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern ConfFile tuxlang; /*!< le tableau qui contiendra les messages localisés */
    Voici l'erreur retournée par mon compilateur GCC 4.6.1 sous LINUX/Debian :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur: expected primary-expression before ')' token
    J'espère avoir été assez explicite.

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Kasyon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _log(section,type,level,msg,args...) if(checklog(section,type,level)){  __log_entry(section,type); fprintf(stdout,"%s\n",tuxlang[msg].c_str() ,  args );}
    Hello,

    La syntaxe pour les arguments variables n'est pas bonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _log(section,type,level,msg,...) if(checklog(section,type,level)){  __log_entry(section,type); fprintf(stdout,"%s\n",tuxlang[msg].c_str() ,  __VA_ARGS__ );}
    edit: quoi que, a priori valide qu'en C (C99), mais non standard en C++ ?

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Kasyon Voir le message
    J'espère avoir été assez explicite.
    Non, il manque l'endroit précis où le compilateur t'insulte...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre à l'essai
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    Non, il manque l'endroit précis où le compilateur t'insulte...
    Le compilateur râle sur la ligne de LOG.CPP, il n'accepte pas ma string "main_tuxastart" d'où l'erreur de mon précedent post

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    dans , c'est quoi au juste tuxlang ? un vector, une map, un tableau C ?
    Je demande parce que, si je lis bien, tu lui passes en index, une chaîne de caractère, à savoir

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par Kasyon Voir le message
    [/CODE]

    TUXLANG.H

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern ConfFile tuxlang; /*!< le tableau qui contiendra les messages localisés */
    Si c'est un tableau (C style) il faut lui donner un index (ou une primary expression) non ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur / Technicien support
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    Points : 11
    Points
    11
    Par défaut
    Voila le code de ConfFile :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #define _BLANK(x) ((x)==' '||(x)=='\t'||(x)=='\r')
     
    #define __trim(__a) i=__a.find_first_not_of(" \t\r"); j=__a.find_last_not_of(" \t\r"); ++j; __a.assign(__a.substr(i,j));
     
    #define BUFSIZE 2048
     
    char buf[BUFSIZE];
     
    const char *ConfFile::contents ()
    {
      string cnt;
      map < string, string >::iterator i, j;
      i = conf_vars.begin ();
      j = conf_vars.end ();
      cnt="";
      while (i != j) {
        cnt += (*i).first + " = " + (*i).second + "\n";
        ++i;
      }
      return cnt.c_str ();
    }
     
    void ConfFile::init (string & filename)
    {
      //cout<<"conffile object ::init()'ing."<<endl<<flush;
      char *ptr;
      int i, j;
      string var, val;
      ifstream f (filename.c_str ());
      conf_vars.clear();
      while (f.getline (buf, BUFSIZE)) {
        // format : var = val # commentaire
        //_cd<<"read a line : "<<buf<<endl;
        var = "";
        val = "";
        ptr = buf;
        //_cd<<"entering loop"<<endl;
        //_cd;
        while (_BLANK (*ptr) && *ptr) {
          ++ptr;
          //cout<<".";
        }
        if (*ptr != '#' && *ptr) {
          //_cd<<"not a comment."<<endl;
          while (*ptr != '=' && *ptr != '#' && *ptr) {
            var += *(ptr++);
          }
          //_cd<<"VAR : "<<var<<endl;
          //_cd<<"ptr= "<<ptr<<endl;
          //_cd;
          if(*ptr=='=') ++ptr;
          if (*ptr && *ptr != '#') {
            ++ptr;
            //cout<<".";
            while (*ptr && *ptr != '#') {          if(*ptr=='\\') {
                //cout<<"escape ";
                ++ptr;
                if(*ptr==0) {
                  //cout<<"newline"<<endl;
                  f.getline (buf, BUFSIZE);
                  ptr=buf;
                  val += '\n';
                  continue;
                }
                if(*ptr=='n') {
                  val += '\n';
                } else if(*ptr=='\t') {
                  val += '\t';
                } else if(*ptr=='\\') {
                  val += '\\';
                }
                ++ptr;
              } else {
                val += *(ptr++);
              }
            }
            // clean strings (trim)
            __trim (var);
            __trim (val);
            __trim (var);
            __trim (val);
            if (var != "")
              conf_vars[var] = val;
          }
        }
      }
    }

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par Kasyon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const char *ConfFile::contents ()
    {
      string cnt;
      map < string, string >::iterator i, j;
      i = conf_vars.begin ();
      j = conf_vars.end ();
      cnt="";
      while (i != j) {
        cnt += (*i).first + " = " + (*i).second + "\n";
        ++i;
      }
      return cnt.c_str ();
    }
    rien à voir avec l'erreur mais cnt est une variable string locale, qui sera donc détruite à la sortie de la fonction 'contents'... que devient le pointeur renvoyé par cnt.c_str() ?

    Sinon pour l'erreur de base, je ne vois pas de surcharge de l'opérateur [] pour pouvoir lui passer une chaîne, peut-être est-elle dans le .h et qu'elle fait juste appel à l'opérateur [] de conf_vars ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2011, 12h25
  2. Réponses: 2
    Dernier message: 08/02/2010, 11h00
  3. Réponses: 3
    Dernier message: 15/05/2009, 17h18
  4. expected primary-expression before '=' token
    Par steph_p dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2009, 17h03
  5. Expected primary expression
    Par Shargat dans le forum C++
    Réponses: 2
    Dernier message: 08/04/2008, 11h13

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