2010-03-24 4 views
0

J'ai une classe de traits qui est utilisé pour l'impression de différents types de caractères:erreur en utilisant des traits classe .: "destructor constructeur attendu ou la conversion de type avant 'et' jeton"

template <typename T> 
class traits { 
public: 
    static std::basic_ostream<T>& tout; 
}; 
template<> 
std::ostream& traits<char>::tout = std::cout; 
template<> 
std::wostream& traits<unsigned short>::tout = std::wcout; 

gcc (g ++) version 3.4. 5 (oui un peu vieux) lance une erreur: "constructeur de destructeur attendu ou conversion de type avant" & "jeton"

Et je me demande s'il y a un bon moyen de résoudre ce problème.

(il est aussi en colère à propos _O_WTEXT donc si quelqu'un a obtenu un aperçu, je serais également reconnaissant)

+0

Quelle plate-forme utilisez-vous? Sur les plates-formes non-Windows, 'wchar_t' n'est certainement pas synonyme de' unsigned short'. Ce n'est pas que cela ait une incidence sur le problème auquel vous faites face, bien sûr. :-P –

+0

Ah oui - je suis en effet en train d'utiliser une machine Windows. Je suis conscient que sur d'autres architectures, wchar_t peut avoir plus/moins d'octets. – Mark

+0

ce n'est pas à propos de la taille. C'est à propos de l'identité de type. –

Répondre

1

wchar_t est un type différent de celui unsigned short. Vous devez utiliser

template<> 
std::wostream& traits<wchar_t>::tout = std::wcout; 

Même s'ils peuvent utiliser la même représentation, ils sont néanmoins des types entiers différents. Tout comme les trois de char, signed char et unsigned char.

Assurez-vous également que vous avez inclus l'en-tête correct (<ostream> ou inclure <iostream>).

Questions connexes