2009-11-16 8 views
1
#include<string> 
using namespace std; 

int main(){ 
    const int SIZE=50; 
    int count=0; 
    ifstream fin("phoneData.txt"); 
    ofstream fout("phoneList.txt"); 
    string firstName, lastName, phoneNumber; 
    if (!fin){ 
     cout<<"Error opening file. program ending."<<endl; 
     return 0; 
    } 
    while (count<SIZE && fin>>phoneNumber[count]){ 
     fin.ignore(); 
     getline (fin, firstName[count], '\n'); 
     fin>>lastName[count]; 
     count++; 
    } 
    return 0; 

Voici mon code jusqu'à présent. dans ma boucle while, quelque chose ne va pas avec la getline, je reçois toujours un message d'erreur comme ceci:Erreur de compilation C++

error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::ifstream' 
1>  c:\program files\microsoft visual studio 9.0\vc\include\string(475) : see declaration of 'std::getline' 

aide s'il vous plaît !!! Je ne peux pas comprendre!

Répondre

1
getline (fin, firstName[count], '\n'); 

devrait être:

getline(fin, firstName); 

Il y a plus de problèmes, aussi. Voici un nettoyage possible qui fait quelques hypothèses sur vos données d'entrée que je ne pouvais pas dire à partir de votre code:

#include <iostream> 
#include <fstream> 
#include <string> 

int main(){ 
    using namespace std; 
    ifstream fin("phoneData.txt"); 
    ofstream fout("phoneList.txt"); 
    if (!(fin && fout)){ 
    clog << "Error opening file. program ending.\n"; 
    return 1; 
    } 
    const int SIZE=50; 
    string firstName, lastName, phoneNumber; 
    for (int count = 0; count < SIZE; ++count) { 
    getline(fin, phoneNumber, ' '); 
    getline(fin, firstName, ' '); 
    getline(fin, lastName); 
    if (!fin) { 
     break; 
    } 
    fout << lastName << ", " << firstName << " -- " << phoneNumber << '\n'; 
    } 
    return 0; 
} 

échantillon d'entrée:

123 Marcy Darcy 
555-0701 Daneal S. 

échantillon de sortie:

Darcy, Marcy -- 123 
S., Daneal -- 555-0701 
0

http://www.cplusplus.com/reference/string/getline/

Voici la signature de getline istrea m & getline (istream & est, chaîne & str, char delim);

Faites simplement getline (fin, firstName [compte] , '\ n');

Notez que '\ n' n'est pas obligatoire. Par défaut, il obtient la ligne entière.

Peut-être que vous vouliez déclarer le prénom & co comme vecteurs? std :: vector firstName (TAILLE);

Sur une chaîne, l'opérateur [] obtient char http://www.cplusplus.com/reference/string/string/operator%5B%5D/

donc fin >> lastName [count] serait juste de lire un omble chevalier dans lastname.

+0

Vous avez encore '[count]', qui était le principal problème. –

+0

doh ... en effet ... merci –

0

Que diriez-vous de flux * comprend - juste pour l'hygiène, même si la chaîne les inclut pour vous

getline (fin, prenom); // devrait fonctionner

0

Ni firstName ni lastName ne sont des tableaux, mais vous les utilisez incorrectement comme types de tableau.

0

Je pense que ce que vous cherchez est

char firstName[1024] 
fin.getline (firstName, 1024, '\n') 
+0

Non, istream :: getline ne prend pas une chaîne std :: string. –

+0

Hmmm. C'est un bon point. Je vais changer le code. –