Custom Const Iterator для настраиваемого класса не работает с cbegin - PullRequest
1 голос
/ 06 августа 2020

Здравствуйте, у меня есть класс, подобный следующему:

template<class T, size_t C = 16>
class Vector
{
private:
  

    // STAT. AND DYN. ATTRIBUTES
    T staticVec[C];
    T* dynamicVec = nullptr;
}

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

error: no matching conversion for functional-style cast from 'const int *' to 'VLVector<int, 16>::ConstIterator'
            return ConstIterator(&staticVec[0]);

при этом:

Vector<int> intVector;
    for (int i = 1; i < 50; i++)
    {
       
       intVector.push_back(i);
       
    }
    auto it = intVector.cbegin();

Вот мой класс constIterator (внутри класса VLVector )

class ConstIterator
    {
    private:
    const T* _it;
public:
    typedef T value_type;
    typedef const T& reference;
    typedef const T* pointer;
    typedef int difference_type;
    typedef std::random_access_iterator_tag iterator_category;


        ConstIterator(T* iter = nullptr) : _it(iter){}
        T operator*() const {return *_it;}
        ConstIterator& operator++(){ _it++; return _it;}
        ConstIterator& operator++(int eugene) {ConstIterator temp = *this; _it++; return temp;}
        ConstIterator& operator--(){ _it--; return _it;}
        ConstIterator& operator--(int eugene) {ConstIterator temp = *this; _it--; return temp;}
        friend ConstIterator& operator+(const ConstIterator& lhs, const ConstIterator& rhs) {return lhs._it + rhs
                    ._it;}
        ConstIterator& operator+=(const ConstIterator& rhs) {_it += rhs._it; return *this;}
        ConstIterator& operator-=(const ConstIterator& rhs) {_it -= rhs._it; return *this;}
        bool operator==(const ConstIterator& rhs) {return _it == rhs._it;}
        bool operator!=(const ConstIterator& rhs) {return _it != rhs._it;}
        bool operator>=(const ConstIterator& rhs) {return _it >= rhs._it;}
        bool operator<=(const ConstIterator& rhs) {return _it == rhs._it;}
        bool operator<(const ConstIterator& rhs) {return _it < rhs._it;}
        bool operator>(const ConstIterator& rhs) {return _it > rhs._it;}
    };

А вот мое определение константной версии cbegin:

const_iterator cbegin() const
    {
        if (checker == DYNAMIC)
        {
            return ConstIterator(&dynamicVec[0]);
        }
        else
        {
            return ConstIterator(&staticVec[0]);
        }
    }

Если у кого-то есть идея, это будет очень полезно, спасибо! Не стесняйтесь спрашивать более подробную информацию!

РЕДАКТИРОВАТЬ: Я только что увидел, что у меня нет ошибки при стирании константы, но это действительно странно, и я хотел бы, чтобы это было, если возможно

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