未知类型c ++

时间:2010-10-13 16:05:39

标签: 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'未命名类型

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'没有类型

2 个答案:

答案 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>包含模板代码其余部分使用的类型名称的声明。

但是,如果你问一个(单独的)关于你想要在更高层次上实现什么的问题,这可能会有所帮助。