2010-10-13 80 views
1

我有這些錯誤,我不能固定它:未知類型的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' 的聲明無類型

+0

你使用什麼編譯器?編寫它的人是否用任何東西編譯它?如果是這樣,什麼? – 2010-10-13 16:15:41

+0

我現在修復它的問題是使用typedef,而不是使用 – Yassine 2010-10-13 16:31:32

回答

1

您似乎嘗試使用應該在類的生成中知道的類型,但它們不是模板類的參數,因此它們不存在。

在這裏,您可以簡單地通過使用typedef而不是使用來解決問題。

+0

我試過typedef std :: basic_streambuf :: int_type int_typ;但在'int_typ'之前導致新錯誤';'' – Yassine 2010-10-13 16:21:06

+0

你有一個錯字,它是int_type和e。如果它仍然不起作用,那麼你的問題就在此之前。 – Klaim 2010-10-13 16:22:14

+0

你的tipp很好確定它現在正在工作,如下所示:typedef std :: basic_streambuf base_class; typedef typename base_class :: int_type int_type; – Yassine 2010-10-13 16:27:54

0

是你的代碼還是其他人的代碼?編譯器告訴你int_type和string_type不是已知類型 - 在那個代碼中沒有這些類型的聲明或定義,所以編譯器說的是非常有意義的。

請注意,char_type和traits_type不是標準C++類型,因爲您可能認爲它們是(因此嘗試使用類似名稱的int_type和string_type)。它們是這裏討論的模板的類型參數。換言之,代碼template< class char_type, class traits_type>的位包含模板代碼的其餘部分正在使用的類型名稱的聲明。

但是,如果您提出一個關於您想要在更高級別上實現的(單獨)問題,可能會有所幫助。

+0

它不是我的代碼問題不是與char_type和traits_type,而是與int_type,這是定義像這樣typedef std :: basic_streambuf base_class; 使用typename base_class :: int_type; – Yassine 2010-10-13 16:13:09