Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Заблокирован

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

27.10.2011, 20:28. Показов 3613. Ответов 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>::oper ator =(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>::oper ator =(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> ]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2011, 20:28
Ответы с готовыми решениями:

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

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

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

4
Заблокирован
27.10.2011, 20:36
Я думаю, что так как функция-член константная, то и члены этого объекта рассматриваются как констатные. Поэтому для вашего вектора вызывается функция begin(), которая возвращает константный итератор const_iterator, а присваиваете вы его не константному итератору.
То есть попробуйте написать в функции

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

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

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

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

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

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

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

В большом классе плохо было видно. А когда сделал мини-класс (что б сюда запостить проблему) - сразу в глаза бросилось)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2011, 20:40
Помогаю со студенческими работами здесь

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

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

Не могу понять ошибку
#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...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru