2017-02-10 40 views
1

Я определил шаблон контейнер Tree<T>, с два-членом класса итератора: const_iterator и iteratorNon оператор сравнения члена для шаблона класса

Теперь я хотел бы добавить удобства операторов сравнения члена:

template<typename T> 
bool operator==(Tree<T>::const_iterator a, Tree<T>::iterator b) 
{ 
    return a.ptr() == b.ptr(); 
} 

Но у меня есть ошибка в компиляции:

declaration of 'operator==' as non-function 

Почему? Это связано с шаблоном?

+0

Даже при отсутствии 'typename' ваша перегрузка не может быть действительно использована, поскольку' T' не может быть выведено. Путь - добавить друга 'operator ==' inside 'Tree :: const_iterator'. – Jarod42

ответ

3

Здесь необходимо использовать typename для dependent name, например.

template<typename T> 
bool operator==(typename Tree<T>::const_iterator a, typename Tree<T>::iterator b) 
//    ~~~~~~~~       ~~~~~~~~ 
{ 
    return a.ptr() == b.ptr(); 
} 
+0

Argh. Сообщение об ошибке было не очень явным. Спасибо – galinette

+0

@Someprogrammerdude: wrong ... – galinette

+0

@galinette Я знаю, что знаю ... –

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

  • Нет связанных вопросов^_^