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

Помогите понять ошибку - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Bers
Заблокирован
27.10.2011, 20:28     Помогите понять ошибку #1
Не могу понять, что ему не нравится?
Обычный вектор векторов:

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
template <class typeData>
class Ttest
{
    typedef std::vector<typeData> DataLine;
public:
    Ttest():myKrolic(10,DataLine(10)){}
    int Copy() const;
private:
    std::vector< DataLine >myKrolic; 
};
 
template<class typeData>
int Ttest<typeData>::Copy() const
{
    std::vector< DataLine >::iterator Beg;
    Beg=myKrolic.begin(); //ругается здесь
 
    DataLine::iterator Beg1;
    Beg1=myKrolic[0].begin(); //и здесь
 
    return 0;
}
 
int main (void)
{
 
    Ttest<int> Krol;   Krol.Copy();
    
    EndProgramm();
}

Компилятор кричит:


error C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'std::_Vector_const_iterator<_Ty,_Alloc>' (или приемлемое преобразование отсутствует)
1> with
1> [
1> _Ty=std::vector<int>,
1> _Alloc=std::allocator<std::vector<int>>
1> ]
1> c:\program files\microsoft visual studio 9.0\vc\include\vector(405): может быть 'std::_Vector_iterator<_Ty,_Alloc> &std::_Vector_iterator<_Ty,_Alloc>::operator =(const std::_Vector_iterator<_Ty,_Alloc> &)'
1> with
1> [
1> _Ty=std::vector<int>,
1> _Alloc=std::allocator<std::vector<int>>
1> ]
1> при попытке сопоставить список аргументов '(std::_Vector_iterator<_Ty,_Alloc>, std::_Vector_const_iterator<_Ty,_Alloc>)'
1> with
1> [
1> _Ty=std::vector<int>,
1> _Alloc=std::allocator<std::vector<int>>
1> ]
при компиляции функции-члена "<Нет данных>" класса <Нет данных>
см. ссылку на создание экземпляров класса шаблон при компиляции "Ttest<typeData>"
1> with
1> [
1> typeData=int
1> ]

error C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'std::_Vector_const_iterator<_Ty,_Alloc>' (или приемлемое преобразование отсутствует)
1> with
1> [
1> _Ty=int,
1> _Alloc=std::allocator<int>
1> ]
1> c:\program files\microsoft visual studio 9.0\vc\include\vector(405): может быть 'std::_Vector_iterator<_Ty,_Alloc> &std::_Vector_iterator<_Ty,_Alloc>::operator =(const std::_Vector_iterator<_Ty,_Alloc> &)'
1> with
1> [
1> _Ty=int,
1> _Alloc=std::allocator<int>
1> ]
1> при попытке сопоставить список аргументов '(std::_Vector_iterator<_Ty,_Alloc>, std::_Vector_const_iterator<_Ty,_Alloc>)'
1> with
1> [
1> _Ty=int,
1> _Alloc=std::allocator<int>
1> ]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
27.10.2011, 20:36     Помогите понять ошибку #2
Я думаю, что так как функция-член константная, то и члены этого объекта рассматриваются как констатные. Поэтому для вашего вектора вызывается функция begin(), которая возвращает константный итератор const_iterator, а присваиваете вы его не константному итератору.
То есть попробуйте написать в функции

C++
1
std::vector< DataLine >::const_iterator Beg;
Bers
Заблокирован
27.10.2011, 20:36  [ТС]     Помогите понять ошибку #3
Все. Пока сюда выкладывал, уже успел понять проблему.

Если кому интересно - я два часа пытался понять причину проблемы.
Сгорел на модификаторе const !!!!

Если убрать const c функции-метода, все заработает.

ОН не позволяет присвоимить обычному интератору значение данных-членов, по причине того, что функция заключила контракт что низачто не изменит состояние класса
Сыроежка
Заблокирован
27.10.2011, 20:38     Помогите понять ошибку #4
Цитата Сообщение от Bers Посмотреть сообщение
Все. Пока сюда выкладывал, уже успел понять проблему.

Если кому интересно - я два часа пытался понять причину проблемы.
Сгорел на модификаторе const !!!!

Если убрать const c функции-метода, все заработает.

ОН не позволяет присвоимить обычному интератору значение данных-членов, по причине того, что функция заключила контракт что низачто не изменит состояние класса
Как видите, лично мне хватило одной минуты, чтобы это понять.
Bers
Заблокирован
27.10.2011, 20:40  [ТС]     Помогите понять ошибку #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я думаю, что так как функция-член константная, то и члены этого объекта рассматриваются как констатные. Поэтому для вашего вектора вызывается функция begin(), которая возвращает константный итератор const_iterator, а присваиваете вы его не константному итератору.
да да) Вы меня опередили) Все именно так и есть)

В большом классе плохо было видно. А когда сделал мини-класс (что б сюда запостить проблему) - сразу в глаза бросилось)
Yandex
Объявления
27.10.2011, 20:40     Помогите понять ошибку
Ответ Создать тему
Опции темы

Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru