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

Ошибка в итераторе - C++

Восстановить пароль Регистрация
 
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
19.12.2012, 18:42     Ошибка в итераторе #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
31
32
33
34
35
36
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
 
using namespace std;
 
void init_mas (vector <string> umas)
{
    string str;
 
    cout << "Start to input your strings. End of input - print in 00." << endl;
    while (cin >> str)
    {
        if (str == "00") break;
        umas.push_back(str);
    }
}
 
void output (const vector <string> umas)
{
    vector<string>::iterator out;
 
    for (out = umas.begin(); out != umas.end(); out++)
    {
        cout << *out << endl;
    }
}
 
void main()
{
    vector <string> mmas;
 
    init_mas(mmas);
    output(mmas);
}
Выдает ошибку в процедуре вывода на экран:

IntelliSense: отсутствует оператор "=", соответствующий этим операндам типы операндов: std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::string>>> = std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::string>>>

Компилятор Visual Studio, ошибка возникает в отрезке кода:

C++
1
for (out = umas.begin(); out != umas.end(); out++)
Огромная просьба поправить меня и пояснить, что я неправильно делаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 18:42     Ошибка в итераторе
Посмотрите здесь:

При компиляции ошибка. Ошибка c++ C2678 C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.12.2012, 18:46     Ошибка в итераторе #2
1) что-то подсказывает мне, что нельзя применять неконстантный итератор
2) функция инит точно работает как задумано? В неё вектор передаётся по значению.
3) раз уж решил в оутпут передавать вектор по значению, зачем писать конст? Он и так не смог бы изменить этот вектор. Там же не ссылка передаётся!

Могу ошибаться. С векторами не очень дружу.
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
19.12.2012, 18:50  [ТС]     Ошибка в итераторе #3
Ну, это да, совершенно глупую вещь допустил, признаю =) Но программа опять отказывается работать...

Решил первую проблему удалением const в параметрах процедуры output, но теперь категорически ничего не получаю на экране...
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
19.12.2012, 18:53     Ошибка в итераторе #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
31
32
33
34
35
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
 
using namespace std;
 
void init_mas (vector <string> umas)
{
    string str;
 
    cout << "Start to input your strings. End of input - print in 00." << endl;
    while (cin >> str)
    {
        if (str == "00") break;
        umas.push_back(str);
    }
}
 
void output (vector <string> umas)
{
 
    for (vector<string>::iterator out = umas.begin(); out != umas.end(); out++)
    {
        cout << *out << endl;
    }
}
 
int main()
{
    vector <string> mmas;
 
    init_mas(mmas);
    output(mmas);
}
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
19.12.2012, 18:53  [ТС]     Ошибка в итераторе #5
Kuzia domovenok, можно про твой второй пункт поподробнее? Просто плохо ещё ориентируюсь в передаче параметров в функции в Си...
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:53     Ошибка в итераторе #6
DarkSkazochnik, передавайте вектор по ссылке в функции. const не надо убирать, есть же const_iterator

Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
Просто плохо ещё ориентируюсь в передаче параметров в функции в Си...
В C++
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
19.12.2012, 18:55     Ошибка в итераторе #7
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
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
 
using namespace std;
 
void init_mas (vector <string> umas)
{
    string str;
 
    cout << "Start to input your strings. End of input - print in 00." << endl;
    while (cin >> str)
    {
        if (str == "00") break;
        umas.push_back(str);
    }
}
 
void output (const vector <string> umas)
{
 
    for (vector<string>::const_iterator out = umas.begin(); out != umas.end(); out++)
    {
        cout << *out << endl;
    }
}
 
int main()
{
    vector <string> mmas;
 
    init_mas(mmas);
    output(mmas);
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:55     Ошибка в итераторе #8
sovaz1997, проблема-то не устранена.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
19.12.2012, 18:56     Ошибка в итераторе #9
Цитата Сообщение от Schizorb Посмотреть сообщение
sovaz1997, проблема-то не устранена.
Почему?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
19.12.2012, 18:57     Ошибка в итераторе #10
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Почему?
У тебя output что-нибудь вывело на экран?
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
19.12.2012, 18:58  [ТС]     Ошибка в итераторе #11
Schizorb, спасибо что поправил насчет версии языка.

По ходу дела: ребят, большое спасибо, теперь работает, добавил где надо амперсанды. Дальше буду допиливать сам.
Schizorb
19.12.2012, 19:01
  #12

Не по теме:

Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
спасибо что поправил насчет версии языка.
Просто в Си нет ссылок) Передача по указателю в таких случаях будет нужна.

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.12.2012, 19:03     Ошибка в итераторе #13
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
можно про твой второй пункт поподробнее?
C++
1
2
void init_mas (vector <string> &umas)
void output (const vector <string> &umas)
И итератор, как советует сообщение об ошибке, следует заменить на конст итератор

Добавлено через 1 минуту
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Почему?
потому что у тебя так же нет ссылок, как и у ТС
Yandex
Объявления
19.12.2012, 19:03     Ошибка в итераторе
Ответ Создать тему
Опции темы

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