我有这些错误我无法解决它:
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'未命名类型
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 ++禁止声明'string_type'没有类型
答案 0 :(得分:1)
您似乎尝试使用在类的生成时应该知道的类型,但它们不是模板类的参数,因此它们不存在。
在这里,您可以通过使用typedef而不是使用来解决问题。
答案 1 :(得分:0)
这是你的代码还是其他人的代码?编译器告诉你int_type和string_type不是已知类型 - 在那段代码中没有这些类型的声明或定义,所以编译器所说的非常有意义。
请注意,char_type和traits_type不是标准C ++类型,因为您可能认为它们是(因此尝试使用类似命名的int_type和string_type)。它们是此处模板的类型参数。换句话说,代码template< class char_type, class traits_type>
包含模板代码其余部分使用的类型名称的声明。
但是,如果你问一个(单独的)关于你想要在更高层次上实现什么的问题,这可能会有所帮助。