c ++ итератор типа - PullRequest
       3

c ++ итератор типа

0 голосов
/ 03 мая 2018

Мне нужно написать класс шаблона контейнера, который имеет константный итератор, но я должен сделать так, чтобы это был фактически итератор контейнера stl, который я называю параметром шаблона.

template <typename T, class StoreT = std::vector<T>> 
class Store {
    StoreT data;
public:
    StoreT::const_iterator begin() {return data.begin()}
    StoreT::const_iterator end() {return data.end()}
    //other stuff
}; 

это называется так:

Store<Foo>::const_iterator it1, it2;
    for (it1 = t1.begin(), it2 = t2.begin(); it1 != t1.end(); ++it1,++it2)
        cout<<*it1<<*it2; //just an example

Я получаю много ошибок и не могу понять, как мне заставить это работать. Мне нужно сделать это в школу, через пять часов. Любая помощь приветствуется. Что не так, и что я должен сделать, чтобы это работало?

1 Ответ

0 голосов
/ 03 мая 2018

Вы еще не предоставили полный дамп ошибок, и ваш опубликованный код явно является выдержкой, поэтому я собираюсь указать на некоторые вещи, которые могут быть уже рассмотрены.

Убедитесь, что вы включили vector и iostream.

#include <vector>
#include <iostream>

Вы явно предоставляете пространство имен std, когда ссылаетесь на вектор, а не когда используете cout. У вас есть "использование пространства имен std;" где это возможно? Если нет, то вам нужно

std::cout<<*it1<<*it2; //just an example

Store еще не определил const_iterator, поэтому ваши определения it1 и it2 недействительны. Вам нужен либо typedef, либо оператор using в публичном разделе Store:

public:
using const_iterator = typename StoreT::const_iterator;

Кроме того, вам не хватает ключевого слова typename и некоторых точек с запятой.

typename StoreT::const_iterator begin() {return data.begin();}
typename StoreT::const_iterator end() {return data.end();}

Можно ли предположить, что t1 и t2 оба определены где-то?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...