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 :

inclure la classe string


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Par défaut inclure la classe string
    Bonjour à tous,

    je reprends le c++ alors soyez indulgents.

    Je programme une classe utilisant les string. Mon problème est qu'ils ne sont pas pris en compte, j'ai l'impression que la classe string n'est pas prise en compte.

    le .h :
    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
    #ifndef __claCvs_H__
    #define __claCvs_H__
     
    #include <string.h>
    #include <iostream.h>
     
    class claCvs
    {
       private:
         std::string cvs_file;      // path + file
         std::string cvs_data;
         int cvs_nb_data;      // nombre de colonnes
         int cvs_id_max;           // le plus grand identifiant
     
       public:
         // ----- constructeurs
         claCvs(std::string file, int nb_data);
         // ----- destructeur
         ~claCvs();
         // ----- remplir l'objet (nb_data ne comprend pas)
         void set(std::string file, int nb_data);
         void set_file(std::string file);
         void set_nb_data(int nb_data);
         // ----- vérifie le nombre de colonnes d'une entrée
         bool verif(std::string chaine, bool avec_cle=true);
         // ----- ajouter/modifier/supprimer une ligne (à l'objet)
         bool add(std::string chaine);
         bool modify(std::string chaine, int cle);
         bool del(int cle);
         // ----- charger toutes les données (= annuler les modifs, ou faire un 1er chargement))
         bool load();
         // ----- sauvegarder les données    
         bool save();
    }
    #endif
    et le .cpp
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    #include "classes/claCvs.h"
     
    #include <string.h>
    #include <iostream.h>
    #include <stdlib.h>
     
    claCvs::claCvs(std::string file, int nb_data)
    {
       // constructeur
       cvs_file = file;
       cvs_nb_data = nb_data;
       cvs_id_max = 1;
    }
     
    claCvs::~claCvs()
    {
       // destructeur
    }
     
    void claCvs::set(std::string file, int nb_data)
    {
       cvs_file = file;
       cvs_nb_data = nb_data;
    }
     
    void claCvs::set_file(std::string file)
    {
       cvs_file = file;
    }
     
    void claCvs::set_nb_data(int nb_data)
    {
       cvs_nb_data = nb_data;
    }
     
    bool claCvs::verif(std::string chaine, bool avec_cle=true)
    {
       int pos = 0;
       int indice = 0;
       if(strlen(chaine)==0)
          return false;
       do
       {
           pos = chaine.find(";");
           indice++;   
       }while(pos!=0);
       if(indice == cvs_nb_data && !avec_cle)
          return true;
       else 
       if(indice == (cvs_nb_data+1) && avec_cle)
          return true;
       else
          return false;
    }
     
    bool claCvs::add(std::string chaine)
    {
       int id = cvs_id_max + 1;
       cvs_id_max++;
       std::string idstring;
       itoa(id,idstring,10);
       chaine = idstring + ";" chaine;
       if(!verif(chaine), true)
          return false;
       *cvs_data = chaine;
       return true;
    }
     
    bool claCvs::modify(std::string chaine, int cle)
    {
       int tmp = 0;
       for(int i=0; i<count(cvs_data); i++)
       {
          pos = cvs_data[i].find(";");
          tmp = (int)cvs_data[i].substr(1,pos);
          if(tmp == cle)
          {
             cvs_data[i] = chaine;
             return true;
          }
       }
       return false;
    }
     
    bool claCvs::del(int cle)
    {
       int tmp = 0;
       for(int i=0; i<count(cvs_data); i++)
       {
          pos = cvs_data[i].find(";");
          tmp = (int)cvs_data[i].substr(1,pos);
          if(tmp == cle)
          {
             for(j=i; j<count(cvs_data)-1; j++)
             {
                cvs_data[j] = cvs_data[j+1];
             }
             return true;
          }
       }
       return false;
    }
     
    bool claCvs::load()
    {
       char c;
       FILE * pFile;
       std::string tmp = "";
       pFile = fopen (cvs_file, "r");
       if(pFile == NULL)
          return false;
       do {
          c = fgetc(pFile);
          if (c == '\n')
          {
             *cvs_data = tmp;
             tmp = "";
          }
          else 
             tmp = tmp + c;
       }while (c != EOF);   
       fclose(pFile);
    }
     
    bool claCvs::save()
    {
       char c;
       FILE * pFile;
       std::string tmp = "";
       pFile = fopen (cvs_file, "w+");
       if(pFile == NULL)
          return false;
       for(int i=0; i<count(cvs_data); i++)
       {
          fputs(cvs_data[i], pFile);
          fputc("\n", pFile);
       }    
       fclose(pFile);
    }
    et enfin les erreurs:
    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
     
    [C++ Avertissement] claCvs.cpp(7): W8058 Impossible de créer l'en-tête pré-compilé : en-tête incomplet
    [C++ Erreur] claCvs.cpp(8): E2111 Le type 'claCvs' ne doit pas être défini ici
    [C++ Erreur] claCvs.cpp(8): E2136 Un constructeur ne peut pas avoir de spécification de type de retour
    [C++ Erreur] claCvs.cpp(37): E2148 La valeur de l'argument par défaut a été redéclarée pour le paramètre 'avec_cle'
    [C++ Erreur] claCvs.cpp(40): E2285 Impossible de trouver une correspondance pour 'strlen(string)'
    [C++ Erreur] claCvs.cpp(61): E2285 Impossible de trouver une correspondance pour 'itoa(int,string,int)'
    [C++ Erreur] claCvs.cpp(62): E2379 ; manquant dans l'instruction
    [C++ Erreur] claCvs.cpp(65): E2093 'operator*' non implémenté dans le type 'string' pour les arguments du même type
    [C++ Avertissement] claCvs.cpp(67): W8004 'id' est affecté à une valeur qui n'est jamais utilisée
    [C++ Erreur] claCvs.cpp(72): E2268 Appel à une fonction non définie 'count'
    [C++ Erreur] claCvs.cpp(74): E2451 Symbole 'pos' non défini
    [C++ Erreur] claCvs.cpp(74): E2294 Structure nécessaire sur le côté gauche de . ou .*
    [C++ Erreur] claCvs.cpp(75): E2294 Structure nécessaire sur le côté gauche de . ou .*
    [C++ Erreur] claCvs.cpp(78): E2034 Impossible de convertir 'string' en 'char'
    [C++ Erreur] claCvs.cpp(88): E2268 Appel à une fonction non définie 'count'
    [C++ Erreur] claCvs.cpp(90): E2451 Symbole 'pos' non défini
    [C++ Erreur] claCvs.cpp(90): E2294 Structure nécessaire sur le côté gauche de . ou .*
    [C++ Erreur] claCvs.cpp(91): E2294 Structure nécessaire sur le côté gauche de . ou .*
    [C++ Erreur] claCvs.cpp(94): E2451 Symbole 'j' non défini
    [C++ Erreur] claCvs.cpp(94): E2268 Appel à une fonction non définie 'count'
    [C++ Erreur] claCvs.cpp(109): E2034 Impossible de convertir 'string' en 'const char *'
    [C++ Erreur] claCvs.cpp(109): E2342 Mauvaise correspondance de type dans le paramètre '__path' ('const char *' désiré, 'string' obtenu)
    [C++ Erreur] claCvs.cpp(116): E2093 'operator*' non implémenté dans le type 'string' pour les arguments du même type
    [C++ Avertissement] claCvs.cpp(123): W8070 La fonction devrait retourner une valeur
    [C++ Erreur] claCvs.cpp(130): E2034 Impossible de convertir 'string' en 'const char *'
    [C++ Erreur] claCvs.cpp(130): E2342 Mauvaise correspondance de type dans le paramètre '__path' ('const char *' désiré, 'string' obtenu)
    [C++ Erreur] claCvs.cpp(133): E2268 Appel à une fonction non définie 'count'
    [C++ Erreur] claCvs.cpp(135): E2034 Impossible de convertir 'int' en 'const char *'
    [C++ Erreur] claCvs.cpp(135): E2228 Trop de messages d'erreur ou d'avertissements
    Vous pouvez voir que même la déclaration de la classe pose problème, j'ai du pain sur la planche pour me remettre dans le bain, si vous pouviez me filer un coup de main, outre les erreurs bidons des variables non déclarées, j'ai du mal dans mes premiers déboggages :/

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le header définissant string est <string>, pas <string.h>
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Par défaut
    j'ai déjà essayé avec et sans le .h, ça n echange rien

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Est-ce que le code suivant marche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <string>
     
    int main()
    {
      std::string toto = "Toto";
    }
    Si non, il y a peut-être eu un problème d'installation du compilateur, une mauvaise ligne de commande...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est pas iostream.h mais iostream...
    Dans les entêtes standard y'a aucun .h...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    pour l'erreur claCvs: il te manque 1 point virgule a la fin de ta classe dans le H

    class A
    {
    ...
    };

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Par défaut
    Ah, j'ai commencé le d'écrire la classe sur une autre machine que la mienne, et lorsque je compile chez moi la classe string à l'air de bien être ecceptée, ce que je trouve étrage car je ne pense pas que toutes les fonctions soient bonnes.

    Quoi qu'il en soit, je n'ai plus que 3 erreurs :

    [C++ Erreur] CLACSV.H(19): E2303 Nom de type attendu
    [C++ Erreur] claCsv.cpp(7): E2090 Le qualificateur 'claCsv' n'est pas une classe ou un nom de domaine d'appellation
    [C++ Erreur] claCsv.cpp(7): E2040 Déclaration terminée incorrectement


    C'est au niveau des constructeurs et destructeurs dans le .cpp
    Pourquoi ne les prend-il pas?

    Merci pour vos réponses, elles me sont très utiles, j'avais complètement oublié qu'il fallait un ; après la déclaration d'une calsse

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Par défaut
    j'ai pu enlever els erreurs sur la définition de la classe, par contre toutes les autres erreurs sont à nouveau apparues, une idée?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Par défaut
    le problème est qu'il ne reconnait pas les fonctions, par exemple pour la fonction strlen de la classe string, il va en fait chercher la fonction strlen du domaine std, donc il demande un (char*).
    Pourquoi la déclaration d'un string échoue si je déclare comme cela:
    string test;
    je dois faire:
    std::string std;

    Ce qu'il faudrait c'est de toujours prendre par défaut les string.
    mettre
    using namespace string
    c'est possible?

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    tapes: using namespace std;

  11. #11
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Prends le temps de jeter un oeil à la FAQ. Chapitre sur les strings, et question sur les références, tu y trouveras de la doc sur std::string.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 57
    Par défaut
    ok, merci pour toutes vos réponses, je vais potasser tout ça

Discussions similaires

  1. [VB.NET]petit problème avec la classe string !!
    Par zouhib dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/06/2006, 11h58
  2. Question facile sur la classe string
    Par MarOne dans le forum Langage
    Réponses: 9
    Dernier message: 20/04/2006, 14h28
  3. la classe string
    Par amel2006 dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 16h11
  4. [C++]la classe String
    Par bechbech dans le forum MFC
    Réponses: 5
    Dernier message: 01/04/2006, 15h35
  5. Fuite mémoire de la classe string
    Par jean_barac dans le forum SL & STL
    Réponses: 7
    Dernier message: 28/07/2005, 23h12

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