其實我用intel編譯器編譯某個庫時遇到了問題。模板問題('typename'爲非模板函數參數)
這個相同的庫已經用g ++編譯正確。
問題是由模板引起的。 我想了解是 **typename**
宣佈爲內部函數體不是模板函數的參數和變量聲明
例如:
void func(typename sometype){..
...
typename some_other_type;
..
}
編譯這種代碼農產品下面的錯誤(英特爾) (GCC不要求): 我有以下錯誤
../../../libs/log/src/attribute_set.cpp(415): error: no operator "!=" matches these operands
operand types are: boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'> != boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'>
while (begin != end)
^
detected during instantiation of "void boost::log_st::basic_attribute_set<CharT>::erase(boost::log_st::basic_attribute_set<CharT>::iter<'\000'>, boost::log_st::basic_attribute_set<CharT>::iter<'\000'>) [with CharT=wchar_t]" at line 438
../../../boost/log/attributes/attribute_set.hpp(115): error: no operator "!=" matches these operands
operand types are: boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'> != boost::log_st::basic_attribute_set<wchar_t>::iter<'\000'>
if (it != m_pContainer->end())
我想什麼要了解的是類型名的董事會內部使用y函數,參數聲明。
例:
template< typename CharT >
struct basic_attribute_values_view<CharT>::implementation
{
public:
..
..
void adopt_nodes(**typename attribu**te_set_type::const_iterator& it, **typename attribut**e_set_type::const_iterator end)
{
for (; it != end; ++it)
push_back(it->first, it->second.get());
}
在不同的文件
我有:
template< typename CharT >
class basic_attribute_set
{
friend class basic_attribute_values_view<CharT>;
//! Self type
typedef basic_attribute_set<CharT> this_type;
public:
//! Character type
typedef CharT char_type;
//! String type
typedef std::basic_string<char_type> string_type;
//! Key type
typedef basic_slim_string<char_type> key_type;
//! Mapped attribute type
typedef shared_ptr<attribute> mapped_type;
//! Value type
typedef std::pair< const key_type, mapped_type > value_type;
//! Allocator type
typedef std::allocator<value_type> allocator_type;
//! Reference type
**typedef typename allocator_type::reference reference;**
這會更容易......如果我們有產生編譯器錯誤的代碼(以指示的行引入)。請注意,使用'**'作爲語法不適用於代碼塊。 –
我的示例中的所有迭代器!=動作都會產生相似的錯誤,所以在我的第一個代碼示例中它將是(it!= end;)行。 – bua