Компилятор требует, чтобы пользовательский итератор имел целочисленный тип, чтобы он считался прямым итератором.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Компилятор требует, чтобы пользовательский итератор имел целочисленный тип, чтобы он считался прямым итератором.

Сообщение Anonymous »

Я пишу итератор для пользовательской коллекции:

Код: Выделить всё

template 
class List
{
public:
class Iterator
{

public:

using difference_type = T;
using value_type = T;
using pointer = const T*;
using reference = const T&;
using iterator_category = std::forward_iterator_tag;

Iterator(T* ptr = nullptr) : _ptr(ptr) {}
Iterator& operator++() { _ptr++; return *this; }
Iterator operator++(int) { Iterator retval = *this; ++(*this); return retval; }
std::strong_ordering operator(Test& other) { return _x  other._x; }
bool operator==(Iterator other) const { return _ptr == other._ptr; }
bool operator!=(Iterator other) const { return !(_ptr == other._ptr); }
reference operator*() const { return *_ptr; }
pointer operator->() const { return _ptr; }
reference operator=(const T& value) { *_ptr = value; return value; }

private:
T* _ptr;

};

Iterator begin() { return Iterator(_data); }
Iterator end() { return Iterator(_data + 4); }

List() // Generate generic data
{
for (int i = 0; i < 5; i++)
{
_data[i] = i + 1;
}
}

private:
T _data[5];
};
Это должен быть прямой итератор, но когда я проверяю это с помощью статического утверждения, я могу использовать только экземпляры List, где тип T является целочисленным типом. Ниже приведен пример нецелых типов float и небольшого класса Test. Я также протестировал итератор std::vector по умолчанию с идентичным статическим утверждением и не получил ошибки.

Код: Выделить всё

class Test
{
public:
Test(int x = 0) : _x(x) {}
void Increment() { _x++; }
std::strong_ordering operator(Test& other) { return _x  other._x; }
int operator=(int x) { _x = x; return x; }
friend std::ostream& operator

Подробнее здесь: [url]https://stackoverflow.com/questions/78422628/compiler-is-requiring-a-custom-iterator-to-have-an-integral-type-for-it-to-be-a[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»