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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Bers
Заблокирован
#1

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

27.10.2011, 20:28. Просмотров 2036. Ответов 4
Метки нет (Все метки)

Не могу понять, что ему не нравится?
Обычный вектор векторов:

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> ]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2011, 20:28     Помогите понять ошибку
Посмотрите здесь:

Помогите понять и исправить ошибку... - C++
#include &lt;iostream&gt; using namespace std; int main () { char cc = &quot;Число&quot;; // Массив автоматической памяти float...

Помогите понять и исправить ошибку... - C++
#include &lt;iostream&gt; using namespace std; int LC ; char C = &quot;Фраза&quot;; void WW (void) { LC = sizeof(C); } void Prin (void) ...

Помогите понять и исправить ошибку (статические обьекты) - C++
Недавно начал разбираться в новой теме и тут же с примером ошибка... (компилятор выдает 2 ошибки смысл которых мне относительно ясен но...

понять ошибку - C++
Доброго вечера! Помогите понять что не так. Куда жать, как смотреть ошибку, не пнял. Правой мыщйу на vivodi.cpp , компилировать в...

Не могу понять ошибку - C++
Всем привет. Делаю задание из универа. В принципе все работает с использованием дружественного класса, но хочется обойтись без...

Не могу понять ошибку - C++
#include&lt;iostream.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; int main() { double x=3.741, y=-0.825,z=0.160, A,...

Не могу понять ошибку - C++
Пытаюсь решить вот эту задачу http://www.cyberforum.ru/cpp-beginners/thread356063.html Есть решения на бэйсике вот...

Не могу понять ошибку - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; int main () { double x,a,d,h,t,e,g,b,c,z,y,s,rezylt; не могу понять чем программе sqrt...

не могу понять ошибку - C++
Народ, здарова, сижу над классами, конкретно наследование классов! Компилятор выдает ошибку: Unit1.cpp(143): E2285 Could not find a...

не могу понять ошибку - C++
#include &lt;iostream&gt; using namespace std; int main(); { double a=0, b-0, c=0; cout &lt;&lt;&quot;a&quot;; cin &gt;&gt; a; cout &quot;b&quot;...

Не могу понять ошибку - C++
По задумке надо удалить два идущих подряд одинаковых слова. Задумка не выходит, выдаёт бурду... HELP ME!( #include &quot;stdafx.h&quot; ...

немогу понять ошибку - C++
class Wor { private: static const int sz = 40; char wordik; public: Wor() { strcpy(wordik , &quot;&quot; );


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
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     Помогите понять ошибку
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru