2012-03-07 15 views
5

Sto ottenendo un errore nel codice seguente ha funzionato bene in Visual Studio ma dopo averlo spostato su Xcode che utilizza gcc per compilare ottenere questo errore Nessun costruttore di adattamento per l'inizializzazione di "ifstream" ho cercato di aggiungere questo come riferimento piuttosto che come una copia come suggerito su questo sito, ma ha comunque generato l'errore.Nessun costruttore corrispondente per l'inizializzazione di 'ifstream'

void getAndSetTextData::GetBannedList(string fileName) 
{ 
    bannedWordCount = 0; 
    ifstream inFile(fileName); 
    while(inFile >> currentWord) 
    { 
     bannedWords.push_back(currentWord); 
     bannedWords[bannedWordCount++] = currentWord; 
    } 
    inFile.close(); 
} 

Qualsiasi aiuto sarebbe apprezzato.

+0

Il mio argomento contro l'uso esplicito di close: http://codereview.stackexchange.com/a/544/507 Fondamentalmente se non ti interessa se c'è un errore, lascia che sia il distruttore a farlo. –

risposta

11

ifstream costruttore accetta un const char* come il nome del file (previo C++ 11):

ifstream inFile(fileName.c_str()); 

Un costruttore supplementare che accetta un const std::string& come il nome del file è stata aggiunta in C++ 11.

Punto minore: pensare di cambiare argomento string fileName per const string& fileName per evitare la copia inutile di fileName.

+0

A proposito di tempo hanno finalmente deciso di aggiungere un costruttore che prende una stringa. :) – cHao

+0

Grazie per che funziona ora. – bobthemac

+0

Nomefile è una variabile effettiva definita nel programma o è una variabile che l'utente che legge questa domanda deve compilare con il percorso completo? Chiedo perché nel mio programma sto usando la variabile argv [1] per contenere il percorso e .c_str() * NON * funziona con esso – MarcusJ

0

Per prima cosa è necessario verificare che il file sia aperto o meno. ad esempio, se non avete il permesso di accedere al file o se si sta aprendo un file in modalità di scrittura quando non c'è abbastanza spazio su disco, ecc ... in modo

ifstream inFile(fileName); 
if(! inFile) 
    return; 
while(inFile >> currentWord) 

e sulla tua domanda, sono voi compresi il flusso?

+0

Non proprio nesacery. Se il file non si apre correttamente, il ciclo non verrà mai inserito comunque. –

Problemi correlati