C++ de la copie d'un objet de flux de données

J'ai fait des expériences avec le C++, et j'ai rencontré un problème que je ne sais pas comment le résoudre.

En gros, j'ai découvert que vous ne pouvez pas copier des cours d'eau (voir Pourquoi la copie stringstream n'est pas autorisé?), et qui s'applique également pour les objets de type "wrap". Par exemple:

  • J'ai créer une classe avec un membre de données de type stringstream.
  • - Je créer un objet de cette classe.
  • Je tente de copier l'objet, par exemple "TestObj t1; TestObj t2; t1 = t2;"

Cela provoque l'erreur C2249:

'std::basic_ios<_Elem,_Traits>::operator =": pas de chemin accessible aux membre privé déclaré en base virtuelle 'std::basic_ios<_Elem,_Traits>'

Donc ma question est: comment puis-je (de préférence facilement) copie d'objets qui ont des membres de données de type *stream?

Exemple complet de code:

#include <iostream>
#include <string>
#include <sstream>

class TestStream
{
public:
    std::stringstream str;
};

int main()
{
    TestStream test;
    TestStream test2;
    test = test2;

    system("pause");
    return 0;
}

Merci d'avance.

Mise à JOUR

J'ai réussi à résoudre ce problème merci les réponses ci-dessous. Ce que j'ai fait est de déclarer les objets de flux une fois et ensuite il suffit de faire référence à eux en utilisant des pointeurs dans l'emballage d'objets (par exemple, TestStream). Il en va de même pour tous les autres objets qui ont de la copie privée des constructeurs.

Puisque vous semblez avoir fait votre travail, liés à la question. Pourquoi avez-vous besoin de ce comportement? lecture/écriture?

OriginalL'auteur Matt Larsen | 2011-10-26