У меня есть класс MyHashMap, и я хочу реализовать итератор, но по какой-то причине я не могу. У меня есть вектор, который занимает частную структуру как тип, просто отлично, но когда я пытаюсь определить его с помощью итератора в моем государственном секторе, он говорит, что HashEntry не объявлен. Вот мой класс.C++ Iterator в моем классе не принимает в моей структуре как тип
template<typename KeyType, typename ObjectType>
class MyHashMap
{
public:
/***********ITERATOR FUNCTIONS****************/
typedef typename std::vector<HashEntry>::iterator iterator;
typedef typename std::vector<HashEntry>::const_iterator const_iterator;
iterator begin() { return array.begin(); }
const_iterator begin() const { return array.begin(); }
iterator end() { return array.end(); }
const_iterator end() const { return array.end(); }
private:
struct HashEntry
{
KeyType element;
ObjectType mapped;
EntryType info;
HashEntry( const KeyType & e = KeyType{ },
const ObjectType & m = ObjectType{ },
EntryType i = EMPTY)
: element{ e }, mapped{ m }, info{ i } { }
HashEntry( KeyType && e,
ObjectType && m,
EntryType i = EMPTY)
: element{ std::move(e) }, mapped{ std::move(m) }, info{ i } { }
};
vector<HashEntry> array;
};
Я получаю эти ошибки, как
error: ‘HashEntry’ was not declared in this scope
typedef typename std::vector<HashEntry>::iterator iterator;
^
error: template argument 1 is invalid
typedef typename std::vector<HashEntry>::iterator iterator;
^
error: template argument 2 is invalid
error: ‘HashEntry’ was not declared in this scope
typedef typename std::vector<HashEntry>::const_iterator const_iterator;
^
error: template argument 1 is invalid
typedef typename std::vector<HashEntry>::const_iterator const_iterator;
^
error: template argument 2 is invalid
Любые идеи, что не так? Я уверен, что ответ прост, но я просто не могу понять. Заранее спасибо.
Я думаю, что здесь безопасно переслать объявить его, если вы хотите, как вы просто определить тип, и во время использования 'HashEntry' будет полностью определены. – vsoftco
Спасибо, что сработали. Я не знал, что важно иметь место. – anonuser1234
@vsoftco Да, здесь будет достаточно декларации. Я обновил свой ответ этой запиской, а также добавил небольшой пример схемы заказа, которую я лично использую. –