OVH Cloud OVH Cloud

[newbie] dev-c++ et std::getline(ifstream , string)

5 réponses
Avatar
TSalm
Bonjour à tous,

Dev-cpp refuse de compiler un programme utilisant
std::getline(ifstream,string). Il me dit :
no matching function for call to `getline(std::istream&, std::string
(&)())'

Si quelqu'un a un idée d'avance merci

Ci-dessous le code complet :
#include <string>
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

void usage() {
cout << "Usage: nomFichier texteAChercher" << endl;
}

/* Retourne 0 en cas d'erreur, sinon 1 */
int testOuvertureFichier(ifstream &file) {
// teste ouverture :
if ( !file )
{
cerr << "Erreur d'ouverture\n";
return 0;
}

// teste lecture
string line;
if ( ! ( file >> line ) )
{
cerr << "Erreur de lecture\n";
return 0;
}

return 1;
}

int exit() {
system("PAUSE");
return EXIT_SUCCESS;
}
int main(int argc, char *argv[])
{
if (argc != 3) {
cout << "Erreur dans les paramétres :" << endl;
cout << "Vous avez entrée "<<argc<<" paramétres"<<endl;
usage();
return exit();
}

string fichier = argv[1];
string text = argv[2];
string ligne ();
unsigned int ligne_nbr = 0;

ifstream in(fichier.c_str());
if (testOuvertureFichier(in) == 0) {
cout << "Echec dans l'ouverture du fichier " << fichier << endl;
exit();
}

std::getline (cin , ligne);
while (std::getline(in , ligne)) {
// voir si chaine dans la ligne :
if (ligne.find(text) != std::npos)
cout << ligne_nbr << ": " << ligne << endl;
++ligne_nbr;
}

exit();
}

5 réponses

Avatar
Jean-Marc Bourguet
TSalm writes:

Bonjour à tous,

Dev-cpp refuse de compiler un programme utilisant
std::getline(ifstream,string). Il me dit :
no matching function for call to `getline(std::istream&, std::string (&)())'


Il te dis que tu appelles getline avec comme second argument une
fonction retournant un string...

Cette ligne

string ligne ();


ne fait pas ce que tu crois. Elle declare une fonction et ne definit
pas une variable en appelant le constructeur par defaut comme tu dois
le croire.

string ligne;

if (ligne.find(text) != std::npos)


std::string::npos

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Michel Decima
"TSalm" a écrit dans le message de
news:4461cfdf$0$14029$
Bonjour à tous,

Dev-cpp refuse de compiler un programme utilisant
std::getline(ifstream,string). Il me dit :
no matching function for call to `getline(std::istream&, std::string
(&)())'


Tu veux appeler une fonction getline dont le deuxieme parametre est une
reference
sur une chaine /std::string&/, et le compilateur te dit qu'il ne trouve pas
de
fonctions getline dont le deuxieme parametre est un une reference vers une
fonction
qui renvoie une chaine et ne prends aucun parametres /std::string (&)()/

Dans le main, la variable ligne est declaree comme ceci:

string ligne();

Ce qui est effectivement la declaration d'une fonction. En enlevant les
parentheses,
ca devrait aller beaucoup mieux:

string ligne;

Avatar
tsalm
bon, je viens de trouver : je devais juste initaliser le string de la
façon :
string ligne("");
mais je vois pas le rapport avec le message d'erreur ??
Avatar
tsalm
merci !

(j'avais pas vu les réponse, désolé :/ )
Avatar
tsalm
Il y a également une autre erreur dans mon prog :
remplacer
std::npos par std::string::npos