Salut, et bienvenue sur le forum.
Pour commencer, je vais me permettre quelques remarques d'ordre général:
- Lorsque tu ne souhaite pas déclarer d'argument à fournir à une fonction, tu peux simplement laisser les parenthèses vide, sans indiquer le type void
- Lorsque tu désire passer un classe en argument (comme c'est le cas pour la méthode Analyse::Analyser), il est souvent préférable de la passer sous la forme d'une référence, éventuellement constante (si la méthode en question n'est pas susceptible de la modifier)
- plutôt que de "t'amuser" à jouer avec la méthode substr, il serait peut être intéressant d'utiliser un flux de conversion

- L'inclusion du fichier d'en-tête <vector> dans main.cpp n'est pas indispensable, étant donné qu'il est déjà inclus dans "Analyse.h" et que ce dernier est inclus dans main.cpp (je fameux jeu de "l'inclusion indirecte"
) - il faut faire attention au fait que system("PAUSE") n'est pas portable... Reporte toi à cette entrée de la FAQ pour savoir comment contourner ce problème

Pour ce qui est des erreurs de compilation que tu nous montre, tu peux te dire que la première erreur indiquée est la première qui doit être gérée, car certaines en découlent sans doute.
La première erreur qui apparait est:
\documents\projgeo\analyse.h(20) : error C2061: erreur de syntaxe*: identificateur 'vector'
Et c'est normal...
La classe vector (et la classe string itou, d'ailleurs) est définie... dans l'espace de noms std.
Comme il n'y a pas de directive using namespace std; avant la déclaration de la méthode Analyser, et qu'il en par ailleurs largement déconseillé de l'utiliser dans un fichier d'en-tête, tu te trouve face à l'obligation... d'écrire la portée complète des classes définies dans l'espace de noms std 
Cela signifie que, pour que le compilateur ne se plaigne plus, la déclaration de la méthode Analyser devrait devenir, en prenant en compte la quatrième remarque ci-dessus:
void Analyser(std::vector<std::string> const & tableau) const
Pour prendre en compte la troisième remarque ci-dessus, je te conseillerais en outre de remplacer la partie du code
1 2 3 4 5 6 7 8 9 10 11 12 13
| cout << "Bonjour, quelle operation voulez vous effectuer ?" << endl;
std::getline(std::cin, entree); // Récupération de la ligne complete ( pas de coupure aux espaces )
cout << "Analyse de la chaine ..." << entree << endl;
while (pos != string::npos) {
start = pos;
pos = entree.find(" ", start + 1);
if (start == 0) // Quand c'est le premier mot, pas de suppresion d'espace avant
tableau.push_back(entree.substr(start, pos - start ));
else
tableau.push_back(entree.substr(start + 1, pos - start));
cout << tableau.back() << endl; // Affichage de chaque mot recupéré
} |
par
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| cout << "Bonjour, quelle operation voulez vous effectuer ?" << endl;
std::getline(std::cin, entree); // Récupération de la ligne complete
// ( pas de coupure aux espaces )
cout << "Analyse de la chaine ..." << entree << endl;
/* création d'un flux pour séparer chaque mot */
std::stringstream ss;
/* remplissons le flux avec la chaine récupérée */
ss<<entree;
/* déclarons une chaine temporaire pour récupérer les mots
* (nous aurions pu utiliser entree... mais autant la garder
* intacte :D)
*/
std::string temp;
/* tant que nous récupérons une chaine de caractères au départ du flux
*/
while (ss>>temp) {
/* nous l'insérons dans notre tableau */
tableau.push_back(temp);
/*(et si cela peut te rassurer, nous l'affichons
*/
std::cout<<tableau.back()<<std::endl;
} |
Tu avouera que le code est largement plus simple, malgré tous les commentaires rajoutés 
Partager