Обе мои функции, Begin() и End() имеют ошибку: Member Функция не объявлена в Set<T>
Я также пробовал только Iterator Set<T>::begin()
, у которого была такая же ошибка .. .C++ Функция члена не объявлена ошибка в моем классе шаблона
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class Set
{
public:
class Iterator;
void add(T v);
Iterator begin();
Iterator end();
private:
vector<T> data;
};
template<typename T>
class Set<T>::Iterator
{
public:
Iterator(int index, Set *s);
T get();
void next();
bool equals(Iterator s);
private:
int index;
Set *values;
};
template<typename T>
Set<T>::Iterator::Iterator(int i, Set *s)
{
index = i;
values = s;
}
template<typename T>
T Set<T>::Iterator::get()
{
return (*values).data[index];
}
template<typename T>
void Set<T>::Iterator::next()
{
index++;
}
template<typename T>
bool Set<T>::Iterator::equals(Iterator s)
{
return (values == s.values) && (index == s.index);
}
template<typename T>
Set<T>::Iterator Set<T>::begin()
{
return Iterator(0, this);
}
template<typename T>
Set<T>::Iterator Set<T>::end()
{
return Iterator(data.size(), this);
}
template<typename T>
void Set<T>::add(T v)
{
//
}
Wow ... Я никогда не знал, что вам нужно было поставить typename впереди. Проводили, как час, вытягивая мои волосы. Большое спасибо –
@imdumb да, это не то, чему мы учимся в старшей школе :) См. Также необходимость «шаблона», если вы все еще на этой странице. В принципе, если у вас есть 'template Foo :: memeber_function()', тогда, если вы хотите его вызвать, нужно использовать, например. 'foo.template member_function ()', поскольку в противном случае, если вы просто используете 'foo.member_function ()' компилятор считает, что первый '' 'в создании экземпляра' 'является оператором« меньше », и все ад разрывается. –
vsoftco