사실 저는 인텔 컴파일러로 일부 라이브러리를 컴파일하는 데 문제가 있습니다.템플릿 문제 (템플릿 함수 매개 변수가 아닌 '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;**
컴파일러 오류가 발생한 코드가 있으면 쉽게 될 것입니다 (표시된 선이 표시된 경우). 구문에 '**'를 사용하면 코드 블록에서 작동하지 않습니다. –
모든 iterator! = 예제에서는 simmilar 오류가 발생하므로 첫 번째 코드 예제에서 (it! = end;) 줄이됩니다. – bua