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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
#1

error C2105: для "++" требуется левостороннее значение - C++

14.08.2013, 10:47. Просмотров 1981. Ответов 17
Метки нет (Все метки)

Как правильно записать инкремент для указателя на void?
Все варианты перепробовал и ничего не помогает

C++
1
2
3
4
5
6
7
8
int     arr[] = {1, 2, 3, 4, 5};
void    *p = (int *)arr;
 
for (int i=0; i<5; ++i)
{
    std::cout << *((int *)p) << " ";
    ++((int *)p);       // error C2105: для "++" требуется левостороннее значение
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 10:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос error C2105: для "++" требуется левостороннее значение (C++):

Ошибка "error C2109: для индекса требуется массив или указатель" - C++
Помогите, пожалуйста! Имеется программа: double f4 (double x) { double p,f; double a; int i,j; for(i=1;i&lt;=N;i++) ...

Найти причины и способы исправления ошибки "error C2109: для индекса требуется массив или указатель" - C++
Добрый день! Подскажите пожалуйста, писала программу, но на протяжении всей программы для переменной j выдает ошибку: error C2109: для...

Компилятор выдает ошибку: error C2041: недопустимая цифра "8" для основания "8" - C++
Собственно код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main(){ long double gramm; long double...

Error: значение типа "const char" нельзя присвоить сущности типа "double" - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt;// using namespace std; void main(void) { const int k=5; int a=10; unsigned int...

Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон" - C++
Есть класс бинарного дерева, в нем структура. Класс - Tree, структура - list(листик, а не список). При компиляции выдает...

Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1 - C++
Книга &quot;Основы программирования на C++ том 1&quot;(Стэнли Б.Липпман). Приводится пример кода. #include &lt;iostream&gt; #include &lt;string&gt; using...

17
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
14.08.2013, 11:01 #2
C++
1
p = (int*)p + 1;
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
14.08.2013, 11:02 #3
BigLow,

Не по теме:

не буду спрашивать, зачем это


Цитата Сообщение от BigLow Посмотреть сообщение
C++
1
++((int *)p);
C++
1
++((int * &)p);
1
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.08.2013, 11:03 #4
Полагаю что только так:
C++
1
2
3
4
5
int arr[] = {1, 2, 3, 4, 5};
void* p = arr;
int* v = static_cast<int*>(p);
//++static_cast<int*>(p);  // Error, lvalue required as increment operand
++v;    //Ok
1
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:06  [ТС] #5
Цитата Сообщение от gray_fox Посмотреть сообщение
не буду спрашивать, зачем это
переход к следующему элементу массива
0
Croessmah
14.08.2013, 11:07
  #6

Не по теме:

Цитата Сообщение от BigLow Посмотреть сообщение
переход к следующему элементу массива
Ну это понятно, не понятно почему такое извращение

0
gray_fox
14.08.2013, 11:09
  #7

Не по теме:

Цитата Сообщение от BigLow Посмотреть сообщение
переход к следующему элементу массива
Кэп?) я имел в виду: зачем эта возня с кастами туда\обратно

0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:10  [ТС] #8
Croessmah, gray_fox, эти извращения только для того, чтобы лучше понять как правильно работать с указателями на void )
0
gray_fox
14.08.2013, 11:12
  #9

Не по теме:

Цитата Сообщение от BigLow Посмотреть сообщение
Croessmah, gray_fox, эти извращения только для того, чтобы лучше понять как правильно работать с указателями на void )
С ними лучше вообще не работать. ИМХО)

0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:14  [ТС] #10
если не трудно, то посмотрите вот этот сайт Указатель void * Как там объясняется, то у меня должно компилироваться

pUndefPointer++; // Это неверно, инкрементация не определена…
(int *)pUndefPointer++; // И так тоже ничего не получается…
((int *)pUndefPointer)++; // А так хорошо… Сколько скобок!
++(int *)pUndefPointer; // И вот так тоже хорошо…
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.08.2013, 11:15 #11
BigLow, ну тогда еще пример из книги Страуструпа:
C++
1
2
3
4
5
6
7
8
9
10
11
void f(int* pi)
{
    void* pv = pi; // ok: неявное преобразование из int* в void* 
    *pv; //error: нельзя разыменовать void* 
    pv++; //error: нельзя инкрементировать void* 
          // (неизвестен размер указуемого объекта) 
    int* pi2 = static_cast<int*>(pv) ; //явное преобразование в int* 
    double* pdl = pv; // error 
    double* pd2 = pi; // error 
    double* pd3 = static_cast<double*>(pv) ; //небезопасно 
}
2
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
14.08.2013, 11:17 #12
Цитата Сообщение от BigLow Посмотреть сообщение
++(int *)pUndefPointer; // И вот так тоже хорошо…
Не взлетит, для преинкремента нужно lvalue, результат каста - rvalue.
1
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:23  [ТС] #13
Цитата Сообщение от gray_fox Посмотреть сообщение
для преинкремента нужно lvalue,
для постфиксного инкремента та же ошибка
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
14.08.2013, 11:28 #14
Цитата Сообщение от BigLow Посмотреть сообщение
для постфиксного инкремента та же ошибка
Там то же самое - попытка изменить временное значение.
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:37  [ТС] #15
Цитата Сообщение от DiffEreD Посмотреть сообщение
пример из книги Страуструпа:
DiffEreD, как называется эта книга и на какой странице? хочу почитать
0
14.08.2013, 11:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 11:37
Привет! Вот еще темы с ответами:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Ошибка "error C2446: :: нет преобразования "int" в "char *" - C++
Ошибка: &quot;error C2446: :: нет преобразования &quot;int&quot; в &quot;char *&quot; Когда нажимаю двойным кликом на ошибку меня перекидывает в файл...

Помогите пожалуйста "error C2143:" и "error C4430:" - C++
Здравствуйте. помогите пожалуйста понять как правильно сделать оъявление вот такой штуки... class bst{ struct et{ et* l; ...

Исправить ошибку error C2562: функция типа "void", возвращающая значение - C++
Выдает ошибку error C2562: tabl: функция типа &quot;void&quot;, возвращающая значение. #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt;...


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

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

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