2015-05-06 4 views
0

У меня возникли проблемы с перегрузкой конструктора, так что одна версия принимает итератор и указатель, другая принимает два указателя. Я получаю ошибку повторной декларации и ошибку переопределения. Вот объявления:Ошибка переопределения при использовании указателя и итератора при перегрузке функции

Node(const int*, Node*); 

Node(const initializer_list<int>::iterator, Node*); 
+0

Необходимо показать больше кода. –

+0

также компилятор – EdChum

+0

Итератор для 'initializer_list ' is 'const E *'. http://en.cppreference.com/w/cpp/utility/initializer_list – 0x499602D2

ответ

0

Это происходит потому, что initializer_list :: iterator реализован как внутренний указатель. Этот код из GNU stl:

template<class _E> 
    class initializer_list 
    { 
    public: 
     typedef _E  value_type; 
     typedef const _E& reference; 
     typedef const _E& const_reference; 
     typedef size_t  size_type; 
     typedef const _E* iterator; 
     typedef const _E* const_iterator; 
     //etc... 
    } 
0

Общепринятый подход к решению проблемы такого рода перегрузки заключается в создании шаблонной перегрузки; например

template <typename Iterator> 
Node(Iterator iter, Node *ptr); 

Но это предполагает, что реализация является общей для этих типов.

Смежные вопросы