2012-03-07 12 views
5

Estoy obteniendo un error en el siguiente código que funcionó bien en Visual Studio pero una vez que lo moví a Xcode que usa gcc para compilar, obtengo este error No matching constructor para inicialización de 'ifstream' analicé agregar esto como referencia en lugar de una copia como se sugiere en este sitio, pero aún así apareció el error.Ningún constructor que coincida para la inicialización de 'ifstream'

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

Cualquier ayuda sería apreciada.

+0

Mi argumento contra el uso explícito de close: http://codereview.stackexchange.com/a/544/507 Básicamente, si no te importa si hay un error, deja que lo haga el destructor. –

Respuesta

11

ifstream constructor acepta una const char* como el nombre de archivo (antes C++ 11):

ifstream inFile(fileName.c_str()); 

Un constructor adicional que acepta un const std::string& como el nombre de archivo se añadió en C++ 11.

Un pequeño punto: considerar el cambio de argumento string fileName a const string& fileName para evitar la copia innecesaria de fileName.

+0

Acerca del tiempo, finalmente decidieron agregar un constructor que toma una cadena. :) – cHao

+0

Gracias por eso funciona ahora. – bobthemac

+0

¿FileName es una variable real definida en su programa, o es una variable que el usuario que lee esta pregunta debe completar con la ruta completa? Pregunto porque en mi programa estoy usando la variable argv [1] para mantener la ruta, y .c_str() * NO * funciona con ella – MarcusJ

0

primero debe comprobar que el tiempo en que el archivo está abierto o no. por ejemplo, si usted no tiene permiso para acceder al archivo o si va a abrir un archivo en modo de escritura cuando no hay suficiente espacio en disco, etc ... por lo

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

y sobre su pregunta, que son incluidos el flujo?

+0

No realmente nesacery. Si el archivo no se abre correctamente, el bucle nunca se ingresará de todos modos. –

Cuestiones relacionadas