2016-10-24 1 views
-6

Je sais que je sais Cette question a déjà été posée, mais j'ai regardé toutes les réponses et aucune ne semble résoudre mon problème. la fonction getline pour obtenir le contenu d'une ligne dans le fichier, il ne fonctionne pasProblèmes Getline C++ (Aucune instance de la fonction surchargée "getline"

getline(file, line); 

« fichier » est déclarée ici.

ifstream File; 
File.open("fruit.txt"); 

et « ligne » est déclarée ici:

int line = 0; 

GetLine est souligné en rouge avec ce message:

getline 
no instance of overloaded function "getline" matches the argument list 
argument types are :(std::ifstream, int) 

Cela signifie aucune instance de getline a la liste des arguments du flux de fichiers et un entier.

Cela n'a aucun sens que toutes les autres questions sur cet état de la matière exactement ce que les arguments sont le flux de fichiers et un entier.

Qu'est-ce que je fais mal?

EDIT:

Voici le code complet:

ifstream fruitFile; 
fruitFile.open("fruit.txt"); 
int line = 0; 
int C_FRUIT = getline(fruitFile, line); 
fruitFile.close(); 

La première ligne doit être un nombre, et je besoin.

+1

S'il vous plaît citer votre sources. –

+2

Veuillez nous donner assez de code pour reproduire le problème. Aussi, pouvez-vous expliquer ce que vous attendez de ce code? Honnêtement, je ne peux pas imaginer ce que vous pensez que cela va faire. –

+1

Vous confondez 'std :: getline' et' std :: ifstream :: getline'. Aussi, je suis presque sûr que ce dernier ne fait pas ce que vous pensez qu'il fait. Recherchez leur définition dans [certains documents] (http://en.cppreference.com/w/) pour savoir comment les deux fonctions fonctionnent en détail. (De plus, n'utilisez pas 'std :: ifstream :: getline'.) –

Répondre

2

getline() lira une ligne de texte. Il ne peut pas lire directement un int. C'est pourquoi vous obtenez votre message d'erreur.

Vous devez être conscient qu'il existe deux getline(). Il y en a un qui est istream::getline() et std::getline(). Les deux ont des signatures différentes. La première est une fonction membre d'un flux et est définie dans l'en-tête du flux; ce dernier est défini dans l'en-tête <string>. Mais faites attention: la valeur de retour de std::getline() n'est pas int! C'est une référence de flux. C'est pourquoi vous obtenez une deuxième erreur de compilation.

Enfin, si vous voulez lire un x entier, il est plus facile d'utiliser des extracteurs:

int value; 
fruitFile >> value; 
fruitFile.ignore(SIZE_MAX, '\n'); // in case you'd need to go to next line 

Ou si vous voulez vraiment lire un entier en une ligne complète:

string line; 
getline(fruitFile, line); 
stringstream sst(line);  // creates a string stream: a stream that takes line as input 
sst >> value;  
+0

Aha! Merci c'est parfait, les gens n'expliquaient pas assez pour que je puisse réparer et comprendre mon problème. <3 – owenbradstreet

4

Le deuxième argument de getline doit être une chaîne: http://www.cplusplus.com/reference/string/string/getline/

Je pense que ce que vous essayez d'atteindre est:

ifstream fruitFile; 
fruitFile.open("fruit.txt"); 
int line = 0; 
fruitFile >> line 
fruitFile.close(); 
+0

Cela ne fonctionne pas non plus ... Je suis tellement confus – owenbradstreet

+0

@owenbradstreet Que signifie "Cela ne fonctionne pas" signifie? Incluez-vous 'std :: string'? – George

+0

J'utilise namespace std, et le second argument est une chaîne. Il donne toujours une erreur – owenbradstreet