2010-10-13 6 views
1

Je ces erreurs je ne pouvais pas la réparer:types inconnus C++

template< class char_type, class traits_type> 
class invalid_streambuf : public std::basic_streambuf< char_type, traits_type> 
{ 
typedef std::basic_streambuf< char_type, traits_type> base_class; 
using typename base_class::int_type; 
... 
virtual int_type overflow(int_type nChar) 
{ return 0; } 
... 
} 

'INT_TYPE' ne désigne pas un type

template< class char_type, class traits_type> 
class basic_thread_safe_log 
: protected basic_message_handler_log< char_type, traits_type> 
{ 
typedef basic_message_handler_log< char_type, traits_type> base_class; 
using typename base_class::string_type; 

void on_last_message(const string_type & str) 
{ 
    assert (str.empty()); 
} 
... 
} 

ISO C++ interdit la déclaration de 'STRING_TYPE' sans type

+0

Quel compilateur utilisez-vous? La personne qui l'a écrit l'a-t-elle compilée avec quoi que ce soit? Si oui, quoi? –

+0

je l'ai corrigé maintenant le problème était d'utiliser typedef au lieu d'utiliser – Yassine

Répondre

1

Vous semblez essayer d'utiliser des types qui devraient être connus lors de la génération de la classe, mais ils ne sont pas des paramètres de votre classe de modèle, ils n'existent donc pas.

Ici, vous pouvez résoudre le problème simplement en utilisant typedef au lieu d'utiliser.

+0

J'ai essayé typedef std :: basic_streambuf :: int_type int_typ; mais provoque une nouvelle erreur attendue ';' avant 'int_typ' – Yassine

+0

Vous avez une faute de frappe, c'est int_type avec un e. Si cela ne fonctionne toujours pas, alors votre problème est avant. – Klaim

+0

votre tipp était bon ok il fonctionne maintenant comme suit: typedef std :: basic_streambuf base_classe; typedef typename base_class :: int_type int_type; – Yassine

0

Est-ce votre code ou le code de quelqu'un d'autre? Le compilateur vous dit que int_type et string_type ne sont pas des types connus - dans ce code, il n'y a pas de déclaration ou de définition de ces types, donc ce que dit le compilateur est parfaitement logique. Notez que char_type et traits_type ne sont pas des types C++ standard, comme vous pouvez le croire (et essayent donc d'utiliser les types int_type et string_type). Ce sont des paramètres de type pour le modèle en question ici. En d'autres termes, le bit de code template< class char_type, class traits_type> contient les déclarations des noms de types utilisés par le reste du code de modèle. Cependant, il peut être utile de poser une question (distincte) sur ce que vous essayez d'atteindre à un niveau supérieur.

+0

ce n'est pas mon code le problème n'est pas avec char_type et traits_type mais avec int_type qui est défini comme ceci typedef std :: basic_streambuf base_classe; en utilisant le nom de type base_class :: int_type; – Yassine

Questions connexes