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++

Vue hybride

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

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