Форум программистов, компьютерный форум CyberForum.ru

Почему не компилируются вызовы алгоритмов при использовании собственного итератора? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевод из 10СС http://www.cyberforum.ru/cpp-beginners/thread176227.html
извините за граматику!! как перевести десятичное число у q-систему счисления. например, троичную, пятиричную.q вводить с клавиатуры.и чтобы переводило как и целую часть, так и дробную!
C++ Как указать пусть к файлу в fopen Здраствуйте, подскажите пожалуйсто, как мне указать определенный пусть к файлам в программе:#include <stdio.h> #include <iostream> using namespace std; int main() { FILE *file; FILE *file1; char file_name = "filee.txt"; char file_namee = "file.txt"; http://www.cyberforum.ru/cpp-beginners/thread176216.html
Интеграл Лапласа C++
Помогите написать функцию интеграла Лапласаиз теории вероятности по теореме Муавра_Лапласа, ну или можно подробно объяснить как его посчитать так как программач знаю, а интегралы нет, заранее спс...
Ошибка вывода или проги? C++
Собственно элементарная задача. Упорядочить по возростанию в масиве элементы в столбцах, а затем сами столбцы по первым элементам. Сначала написал в Паскале, там все работает. Потом по аналогии в С. Все перепроверил как-бы. Вроде все правильно написал, и оно даже правильно работает вроде, но при выводе вместо самого первого элемента матрицы выдает чушь. Причем число всегда одинаковое, независимо...
C++ Расчет длительности в днях промежутка времени между двумя датами http://www.cyberforum.ru/cpp-beginners/thread176180.html
ВСем Привет! Пфф,у кого-нибудь такая задачка встречалась? Можеть быть есть у кого? Помогите пожалуйста. В голову ничего не приходит,как находить промежуток времени. Разработать программу для расчета длительности в днях промежутка времени между двумя датами. Обеспечить возможность ввода дат с клавиатуры в различных форматах: дд.мм.гг, дд.мм.гггг, дд:мм:гг, дд:мм:гггг, дд название_месяца гггг,...
C++ структуры задание: 1)Написать структуру Train, содержащую следующие поля: название пункта назначения номер поезда время отправления 2) ввод с клавиатуры данных в массив, состоящий из шести элементов типа Train; записи должны быть упорядочены по времени отправления; 3) вывод информации о поездах, направляющихся в пункт, название которого введено с клавиатуры подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.10.2010, 14:45     Почему не компилируются вызовы алгоритмов при использовании собственного итератора?
Есть класс итератор. Автономно, со своим вектором он работает прекрасно. В алгоритмах в чем-то проблема. Подскажите плиз в чем? Швыряет такую ошибку:

Код
Error	1	error C2665: 'std::_Debug_range2' : none of the 2 overloads could convert all the argument types	c:\program files\microsoft visual studio 8\vc\include\xutility	1406
В функции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
template<class _InIt> inline
    void __CLRCALL_OR_CDECL _Debug_range(_InIt _First, _InIt _Last, const wchar_t *_File, unsigned int _Line)
    {   // test iterator pair for valid range
    _Debug_range2(_First, _Last, _File, _Line, _Iter_cat(_First));
    }
 
template<class _InIt> inline
    void __CLRCALL_OR_CDECL _Debug_range2(_InIt, _InIt, const wchar_t *, unsigned int ,
        input_iterator_tag)
    {   // test iterator pair for valid range, arbitrary iterators
    }
 
template<class _RanIt> inline
    void __CLRCALL_OR_CDECL _Debug_range2(_RanIt _First, _RanIt _Last, const wchar_t *_File, unsigned int _Line,
        random_access_iterator_tag)
    {   // test iterator pair for valid range, random-access iterators
    if (_First != _Last)
        {   // check for non-null pointers, valid range
        _DEBUG_POINTER2(_First, _File, _Line);
        _DEBUG_POINTER2(_Last, _File, _Line);
        if (_Last < _First)
            _DEBUG_ERROR2("invalid iterator range", _File, _Line);
        }
    }
В чем может быть проблема? Хотя бы примерно... Ведь мой итератор должен по идее работать с алгоритмами.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
struct random_access_iterator_tag
{
};
 
template<class IterType, class AllocType>
class Iterator
{
public:
    typedef IterType value_type;
    typedef typename AllocType::difference_type difference_type;
    typedef typename AllocType::reference reference;
    typedef typename AllocType::pointer pointer;
    typedef size_t size_type;
    typedef random_access_iterator_tag iterator_category;
    
    Iterator()
    {
        Iter=0;
    }
    Iterator(pointer Other)
    {
        Iter=Other;
    }
    Iterator(Iterator& Other)
    {
        Iter=Other.Iter;
    }
    ~Iterator()
    {
    }
    Iterator& operator =(const Iterator& Other)
    {
        Iter=Other.Iter;
        return *this;
    }
    pointer operator ->() const
    {
        return &*Iter;
    }
    reference operator *() const
    {
        return *Iter;
    }
    Iterator& operator ++()
    {
        ++Iter;
        return *this;
    }
    Iterator operator ++(int i)
    {
        Iterator Temp(*this);
        ++(*this);
        return Temp;
    }
    Iterator& operator --()
    {
        --Iter;
        return *this;
    }
    Iterator operator --(int i)
    {
        Iterator Temp(*this);
        --(*this);
        return Temp;
    }
    Iterator& operator +=(const difference_type& idx)
    {
        Iter+=idx;
        return *this;
    }
    Iterator& operator -=(const difference_type& idx)
    {
        Iter-=idx;
        return *this;
    }
    Iterator operator +(const size_type& idx) const
    {
        return Iter+idx;
    }
    Iterator operator -(const size_type& idx) const
    {
        return Iter-idx;
    }
    reference operator [](const size_type& idx) const
    {
        return *(Iter+idx);
    }
    bool operator <(const Iterator& Other) const
    {
        return Iter<Other.Iter;
    }
    bool operator >(const Iterator& Other) const
    {
        return (!(*this<Other));
    }
    bool operator ==(const Iterator& Other) const
    {
        return Iter==Other.Iter;
    }
    bool operator !=(const Iterator& Other) const
    {
        return (!(*this==Other));
    }
    bool operator <=(const Iterator& Other) const
    {
        return Iter<=Other.Iter;
    }
    bool operator >=(const Iterator& Other) const
    {
        return (!(*this<=Other));
    }
    difference_type operator -(const Iterator& Other) const
    {
        return Iter-Other.Iter;
    }
private:
    pointer Iter;
};
В векторе:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef Iterator<Type, AllocType> iterator;
    inline iterator begin() const
    {
        return iterator(Arr);
    }
    inline iterator end() const
    {
        return iterator(Arr+Size);
    }
    inline iterator rbegin() const
    {
        return iterator(Arr+Size);
    }
    inline iterator rend() const
    {
        return iterator(Arr);
    }
Добавлено через 11 часов 20 минут
Долбанные зависимости. Решилось все невообразимо просто.
И все стало работать.
C++
1
2
3
struct random_access_iterator_tag:public std::bidirectional_iterator_tag
{
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru