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 averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    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
    Membre Expert
    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
    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 : 62
    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
    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 averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    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 très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    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 très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    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 averti
    Homme Profil pro
    Developpeur / Technicien support
    Inscrit en
    Février 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2013
    Messages : 30
    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 très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    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, 11h25
  2. Réponses: 2
    Dernier message: 08/02/2010, 10h00
  3. Réponses: 3
    Dernier message: 15/05/2009, 16h18
  4. expected primary-expression before '=' token
    Par steph_p dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2009, 16h03
  5. Expected primary expression
    Par Shargat dans le forum C++
    Réponses: 2
    Dernier message: 08/04/2008, 10h13

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