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 :
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 #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 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
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); }
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 :/
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
Partager