Pregunta

Sólo una aclaración, me refiero a la getline mundial () en la clase string.

Lo que quiero hacer es tener algo como esto:

int main()
{
   wifstream in(L"textfile.txt");
   someFunc(in);
   return 0;
}


void someFunc(const wistream& read)
{
   wstring buff;

   while(getline(read, buff))
   {
      //do some processing here
   }
}

pero me estoy poniendo un:

Error   2   error C2664: 'std::getline' : cannot convert parameter 1 from 'const std::wistream' to 'std::basic_istream<_Elem,_Traits> &'

Para solucionarlo, necesito quitar la const de wistream const y leer. Entiendo por qué ocurre esto, pero es posible configurar getline () para aceptar un wistream lugar sin ningún tipo de conversiones o debería ignorarla y retire la const?

¿Fue útil?

Solución

Lo hace aceptar un wistream, pero getline () exige un argumento que no es constante porque se modifica la corriente. Intente cambiar a:

...
void someFunc(wistream& read)
...

Otros consejos

Los caracteres de lectura de la corriente modifica la corriente. No se pueden marcar la const corriente y esperar que funcione correctamente.

Como regla general,

  1. Siempre pasan los parámetros de función como referencias const
  2. a menos que sean los tipos predefinidos, en cuyo caso se copian (y const / no const se convierte en una cuestión de estilo)
  3. a menos que estén destinados a ser cambiado dentro de la función de modo que los cambios reflejan a la persona que llama de, a continuación, se pasan por referencia no const
  4. a menos que la función debe ser exigible incluso si las personas que llaman no tienen un objeto para pasar, a continuación, se pasan como punteros (# 1 y # 3 se aplica aquí también)

Streams, sin embargo, son una notable excepción a esta regla, ya que siempre se deben transferir como referencias no const.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top