Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
#1

Непонятная ошибка с вектором - C++

27.02.2013, 21:06. Просмотров 2082. Ответов 11
Метки нет (Все метки)

Пишу в VS ultimate 2012
Сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");
 
    vector<int> v;
 
    v.push_back(4);
    v.push_back(2);
    v.push_back(3);
    v.push_back(1);
 
    v[0]=1;
    v[4]=4;
 
    for(int j=0;j<v.size();j++) //ошибка ссылается сюда
        cout<<v[j]<<' ';
    cout<<endl;
    system("pause");
    return 0;
}
Ошибка: warning C4018: <: несоответствие типов со знаком и без знака
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2013, 21:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятная ошибка с вектором (C++):

Ошибка при работе с вектором - C++
Добрый вечер. у меня есть класс рабочего табеля, в котором есть поле вектора, в каждом элементе содержится количество рабочих часов в...

Ошибка в коде(программа с вектором выполняется только если вызвать её второй раз) - C++
Сабж: void vInit() { vInputing(); // Ввод вектора vector_Size = names.size(); cout &lt;&lt; &quot;Ваш вектор names: &quot;...

Непонятная ошибка - C++
Вообщем имеется такой код: // главная программа aka programm.cpp #include &quot;Sales_item.h&quot; using namespace std; ...

непонятная ошибка - C++
Люди срочно на помощь, в чем касяк // Экзам.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; ...

непонятная ошибка - C++
Начал изучать с++. Все шло хорошо, но потом я столкнулся с проблемой, использовал bass.lib и bass.h. при компиляции выходит такая...

Непонятная ошибка - C++
Задание:С помощью табуляции сделать прогу,которая выводит таблицу.Надо ,чтоб там был цикл While /* * proga.cpp * * Created on:...

11
diagon
Higher
1933 / 1199 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.02.2013, 21:08 #2
C++
1
int j=0;j<v.size()
v.size() возвращает size_t, то бишь беззнаковый тип. А j у вас объявлена как int, то бишь знаковый тип.
А сравнение знаковых и беззнаковых чисел небезопасно.
Но это не ошибка и не мешает компиляции, если что.
0
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
27.02.2013, 21:17  [ТС] #3
Цитата Сообщение от diagon Посмотреть сообщение
C++
1
int j=0;j<v.size()
v.size() возвращает size_t, то бишь беззнаковый тип. А j у вас объявлена как int, то бишь знаковый тип.
А сравнение знаковых и беззнаковых чисел небезопасно.
Но это не ошибка и не мешает компиляции, если что.
Если что,то у меня выбивает ошибку и программа НЕ РАБОТАЕТ,или вам просто хотелось показать свои высокие знания,думая,что я написал код не скомпилировав его и решил,от нех делать,выложить его сюда и озадачить людей?
Вот вбейте этот код у себя и поделитесь результатом

Добавлено через 2 минуты
У меня выскакивает ошибка Debag Assertion failed
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 21:20 #4
BORSHEVIK, старина, у тебя в векторе 4 элемента. А ты пытаешься работать с 5-м посредством v[4].

C++
1
    v[4]=4;
Вот тут
0
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
27.02.2013, 21:23  [ТС] #5
Цитата Сообщение от BORSHEVIK Посмотреть сообщение
Пишу в VS ultimate 2012
Сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");
 
    vector<int> v;
 
    v.push_back(4);
    v.push_back(2);
    v.push_back(3);
    v.push_back(1);
 
    v[0]=1;
    v[4]=4;
 
    for(int j=0;j<v.size();j++) //ошибка ссылается сюда
        cout<<v[j]<<' ';
    cout<<endl;
    system("pause");
    return 0;
}
Ошибка: warning C4018: <: несоответствие типов со знаком и без знака
Я нашёл ошибку,в строке v[4]=4; ,а должно быть v[3]=4;получается,что 5 элемент нету,а попытка изменить его приводит к краху

Добавлено через 1 минуту
Цитата Сообщение от ITcrusader Посмотреть сообщение
BORSHEVIK, старина, у тебя в векторе 4 элемента. А ты пытаешься работать с 5-м посредством v[4].
Да,я уже сам увидел,но спасибо,что тоже заметили и сообщили. С самими векторами раньше дел не имел,но разве их нельзя наполнять как обычные массивы через индекс? только методом push_back?
0
alsav22
5431 / 4826 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2013, 21:25 #6
Цитата Сообщение от BORSHEVIK Посмотреть сообщение
Если что,то у меня выбивает ошибку и программа НЕ РАБОТАЕТ,или вам просто хотелось показать свои высокие знания,думая,что я написал код не скомпилировав его и решил,от нех делать,выложить его сюда и озадачить людей?
Вот вбейте этот код у себя и поделитесь результатом
Прежде чем претензии предъявлять, прочтите свой первый пост. Вопрос был по предупреждению: "warning C4018: <: несоответствие типов со знаком и без знака", на что вам и ответили. Где у вас, в первом восте, написано, что код не работает? Какой вопрос, такой и ответ.
0
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
27.02.2013, 21:27  [ТС] #7
В общем я понял...Чтобы можно было работать через индекс,мне сначала нужно указать размер вектора...
Всё,спасибо всем,кто отозвался

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Прежде чем претензии предъявлять, прочтите свой первый пост. Вопрос был по предупреждению: "warning C4018: <: несоответствие типов со знаком и без знака", на что вам и ответили. Какой вопрос, такой и ответ.
может вопрос я задал не совсем корректно,но мне больше не нравится "Если что",когда люди умничают не по делу
0
alsav22
27.02.2013, 21:31
  #8

Не по теме:

Цитата Сообщение от BORSHEVIK Посмотреть сообщение
может вопрос я задал не совсем корректно,но мне больше не нравится "Если что",когда люди умничают не по делу
При чём здесь умничанье. Человек откуда знает: отличаете вы предупреждение от ошибки или нет? Он на всякий случай и написал.

0
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
27.02.2013, 21:41  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение

Не по теме:

При чём здесь умничанье. Человек откуда знает: отличаете вы предупреждение от ошибки или нет? Он на всякий случай и написал.

Перечитайте ЕЩЁ РАЗ,что я написал,мне не понравилось не то,на что он мне указал,а то,что это было сказано так,буду я элементарных вещей не понимаю,а именно в конце он добавил "ЕСЛИ ЧТО".И давайте закончим об этом,я претензий ни к нему и не к вам не имею,и проблема уже была решена.Тему можно закрывать или вообще удалить за неимением интеллектуальной важности и нужности
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 21:43 #10
Цитата Сообщение от BORSHEVIK Посмотреть сообщение
С самими векторами раньше дел не имел,но разве их нельзя наполнять как обычные массивы через индекс? только методом push_back?
Нет, можно заранее выделить для них нужную память, например, объявить его так:

C++
1
vector<int> v(10); // теперь вектор содержит 10 элементов, для которых был выполнен конструктор по умолчанию
После этого с ними можно работать с помощью оператора [], но если нужно еще, придется пушить туда. И да, к тому же, оператор [] не производит контроля границ вектора, в отличае от оператора at(int), который выбрасывает исключение, если граница нарушена.
1
alsav22
27.02.2013, 22:11
  #11

Не по теме:

Цитата Сообщение от BORSHEVIK Посмотреть сообщение
это было сказано так,буду я элементарных вещей не понимаю
Если пишите про предупреждение, что это ошибка, то так и есть.

0
BORSHEVIK
0 / 0 / 0
Регистрация: 20.08.2012
Сообщений: 29
27.02.2013, 22:16  [ТС] #12
Цитата Сообщение от ITcrusader Посмотреть сообщение
Нет, можно заранее выделить для них нужную память, например, объявить его так:

C++
1
vector<int> v(10); // теперь вектор содержит 10 элементов, для которых был выполнен конструктор по умолчанию
После этого с ними можно работать с помощью оператора [], но если нужно еще, придется пушить туда. И да, к тому же, оператор [] не производит контроля границ вектора, в отличие от оператора at(int), который выбрасывает исключение, если граница нарушена.
Ну да,я вообще выше уже отписывался,что именно таким образом можно будет обращаться через индекс,но всё равно спасибо за помощь,приятно осознавать,что людям не всё равно
0
27.02.2013, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 22:16
Привет! Вот еще темы с ответами:

Непонятная ошибка - C++
Добрый день. Переделывал код http://www.cyberforum.ru/cpp-beginners/thread53080.html под свои нужды. Немогу понять в чём ошибка. Заранее...

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

непонятная ошибка - C++
Почему здесь выбивает ошибку? Помогите последнюю лабу сделать) if (x&lt;(*Node)-&gt;l) Add(x,&amp;(*Node)-&gt;l); #include &lt;iostream.h&gt; ...

Непонятная ошибка - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class CMessage { private: char *Text; char...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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