Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
#1

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

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

Как правильно записать инкремент для указателя на void?
Все варианты перепробовал и ничего не помогает
http://www.cyberforum.ru/cpp-beginners/thread1466257.html

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: для индекса требуется массив или указатель"
Добрый день! Подскажите пожалуйста, писала программу, но на протяжении всей...

Компилятор выдает ошибку: error C2041: недопустимая цифра "8" для основания "8"
Собственно код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std;...

Error: значение типа "const char" нельзя присвоить сущности типа "double"
#include &lt;iostream&gt; #include &lt;iomanip&gt;// using namespace std; void...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Error C2062: тип "int" не требуется
Помогите пожалуйста найти ошибку, висуал студио не подсвечивает. /* Создать...

17
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
14.08.2013, 11:01 #2
C++
1
p = (int*)p + 1;
1
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
14.08.2013, 11:02 #3
BigLow,

Не по теме:

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


Цитата Сообщение от BigLow Посмотреть сообщение
C++
1
++((int *)p);
C++
1
++((int * &)p);
1
DiffEreD
1441 / 778 / 257
Регистрация: 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 / 6
Регистрация: 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 / 6
Регистрация: 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 / 6
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:14  [ТС] #10
если не трудно, то посмотрите вот этот сайт Указатель void * Как там объясняется, то у меня должно компилироваться

pUndefPointer++; // Это неверно, инкрементация не определена…
(int *)pUndefPointer++; // И так тоже ничего не получается…
((int *)pUndefPointer)++; // А так хорошо… Сколько скобок!
++(int *)pUndefPointer; // И вот так тоже хорошо…
0
DiffEreD
1441 / 778 / 257
Регистрация: 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!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
14.08.2013, 11:17 #12
Цитата Сообщение от BigLow Посмотреть сообщение
++(int *)pUndefPointer; // И вот так тоже хорошо…
Не взлетит, для преинкремента нужно lvalue, результат каста - rvalue.
1
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:23  [ТС] #13
Цитата Сообщение от gray_fox Посмотреть сообщение
для преинкремента нужно lvalue,
для постфиксного инкремента та же ошибка
1
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
14.08.2013, 11:28 #14
Цитата Сообщение от BigLow Посмотреть сообщение
для постфиксного инкремента та же ошибка
Там то же самое - попытка изменить временное значение.
0
BigLow
55 / 55 / 6
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:37  [ТС] #15
Цитата Сообщение от DiffEreD Посмотреть сообщение
пример из книги Страуструпа:
DiffEreD, как называется эта книга и на какой странице? хочу почитать
0
DiffEreD
1441 / 778 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.08.2013, 12:02 #16
Страуструп Б. Язык Программирования С++, специальное издание, с.148
1
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
14.08.2013, 13:10 #17
DiffEreD,
Цитата Сообщение от DiffEreD Посмотреть сообщение
double* pd3 = static_cast<double*>(pv) ; //небезопасно
почему?
0
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,907
Записей в блоге: 3
Завершенные тесты: 1
14.08.2013, 13:22 #18
Цитата Сообщение от nexen Посмотреть сообщение
почему?
C++
1
void* pv = pi; // ok: неявное преобразование из int* в void*
1
14.08.2013, 13:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 13:22
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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