2013-03-12 4 views
0

Je pose cette question parce que je suis un peu impuissant: cette erreur se produit UNIQUEMENT avec Visual Studio, GCC le compile sans erreurs ni même avertissements. Comme il s'agit d'un code portable, je suis à la recherche d'une solution qui fonctionne avec les deux compilateurs (et dans le meilleur des cas, sans ifdefs dépendant de la plateforme).erreur C2512: 'std :: basic_ostream <_Elem, _Traits>': aucun constructeur par défaut approprié disponible avec Visual Studio seulement

erreur C2512: 'std :: basic_ostream < _Elem, _Traits>': pas de constructeur par défaut approprié disponible

arrive tout en construisant un objet de type MyObject qui est défini comme

class MyObject : public Socket, public std::ostream 

Quels sont les paramètres spéciaux ostream attendus par VS ici?

Répondre

4

std::ostream est un alias de type pour std::basic_ostream<char>. Le constructeur de std::basic_ostream<char> attend un pointeur vers un tampon de flux auquel le flux de sortie est associé. Vous devez en fournir un.

La signature du constructeur est la suivante:

explicit basic_ostream(std::basic_streambuf<CharT, Traits>* sb); 

Votre constructeur de la classe devrait ressembler à ceci:

class MyObject : public Socket, public std::ostream 
{ 
    MyObject(/* ... */) 
     : 
     std::ostream(/* provide a ptr to a stream buffer here /*) 
    // ... 
    { 
     // ... 
    } 
}; 

Voir aussi this pour une référence.

+0

Bonne réponse. Je suis en train de migrer vers VS2012 à partir de VS2008 (et plus) et cela est arrivé. – EJA

+0

@EJA: Heureux que ça vous a aidé :) –

Questions connexes