Question

Juste pour clarifier, je fais référence à la fonction getline globale () dans la classe de chaîne.

Ce que je veux faire est d'avoir quelque chose comme ceci:

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
   }
}

mais je reçois un:

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

Pour le fixer, je dois retirer le const const wistream & lire. Je comprends pourquoi cela se passe, mais est-il possible de configurer getline () pour accepter un wistream au lieu sans aucune conversion ou devrais-je ignorer et supprimer le const?

Était-ce utile?

La solution

Il accepte les wistream un, mais getline () exige un argument non-const, car il modifie le flux. Essayez de changer à:

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

Autres conseils

caractères de lecture du flux modifie le flux. Vous ne pouvez pas marquer le flux const et attendre à ce que fonctionne correctement.

En règle générale,

  1. Je passe toujours des paramètres de fonction en tant que références const
  2. à moins qu'ils sont intégrés dans les types, auquel cas ils sont copiés (et const / non-const devient une question de style)
  3. à moins qu'ils sont destinés à être changé à l'intérieur de la fonction afin que les changements reflètent chez l'appelant, puis ils sont passés par référence non const
  4. à moins que la fonction doit être appelable même si les appelants ne sont pas un objet pour passer, puis ils sont passés comme des pointeurs (# 1 et # 3 applique ici aussi)

cours d'eau, cependant, sont une exception notable à cette règle, car ils doivent toujours être passés en tant que références non const.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top