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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 10:47     error C2105: для "++" требуется левостороннее значение #1
Как правильно записать инкремент для указателя на 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: для "++" требуется левостороннее значение
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 10:47     error C2105: для "++" требуется левостороннее значение
Посмотрите здесь:

C++ error C2040: key: "int [256]" отличается по уровням косвенного обращения от "std::ofstream"
Помогите пожалуйста "error C2143:" и "error C4430:" C++
C++ Error: значение типа "const char" нельзя присвоить сущности типа "double"
C++ Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1
C++ Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
14.08.2013, 11:01     error C2105: для "++" требуется левостороннее значение #2
C++
1
p = (int*)p + 1;
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
14.08.2013, 11:02     error C2105: для "++" требуется левостороннее значение #3
BigLow,

Не по теме:

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


Цитата Сообщение от BigLow Посмотреть сообщение
C++
1
++((int *)p);
C++
1
++((int * &)p);
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.08.2013, 11:03     error C2105: для "++" требуется левостороннее значение #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
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:06  [ТС]     error C2105: для "++" требуется левостороннее значение #5
Цитата Сообщение от gray_fox Посмотреть сообщение
не буду спрашивать, зачем это
переход к следующему элементу массива
Croessmah
14.08.2013, 11:07
  #6

Не по теме:

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

gray_fox
14.08.2013, 11:09
  #7

Не по теме:

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

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

Не по теме:

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

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

pUndefPointer++; // Это неверно, инкрементация не определена…
(int *)pUndefPointer++; // И так тоже ничего не получается…
((int *)pUndefPointer)++; // А так хорошо… Сколько скобок!
++(int *)pUndefPointer; // И вот так тоже хорошо…
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.08.2013, 11:15     error C2105: для "++" требуется левостороннее значение #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) ; //небезопасно 
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
14.08.2013, 11:17     error C2105: для "++" требуется левостороннее значение #12
Цитата Сообщение от BigLow Посмотреть сообщение
++(int *)pUndefPointer; // И вот так тоже хорошо…
Не взлетит, для преинкремента нужно lvalue, результат каста - rvalue.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:23  [ТС]     error C2105: для "++" требуется левостороннее значение #13
Цитата Сообщение от gray_fox Посмотреть сообщение
для преинкремента нужно lvalue,
для постфиксного инкремента та же ошибка
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
14.08.2013, 11:28     error C2105: для "++" требуется левостороннее значение #14
Цитата Сообщение от BigLow Посмотреть сообщение
для постфиксного инкремента та же ошибка
Там то же самое - попытка изменить временное значение.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
14.08.2013, 11:37  [ТС]     error C2105: для "++" требуется левостороннее значение #15
Цитата Сообщение от DiffEreD Посмотреть сообщение
пример из книги Страуструпа:
DiffEreD, как называется эта книга и на какой странице? хочу почитать
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.08.2013, 12:02     error C2105: для "++" требуется левостороннее значение #16
Страуструп Б. Язык Программирования С++, специальное издание, с.148
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
14.08.2013, 13:10     error C2105: для "++" требуется левостороннее значение #17
DiffEreD,
Цитата Сообщение от DiffEreD Посмотреть сообщение
double* pd3 = static_cast<double*>(pv) ; //небезопасно
почему?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 13:22     error C2105: для "++" требуется левостороннее значение
Еще ссылки по теме:

C++ Компилятор выдает ошибку: error C2041: недопустимая цифра "8" для основания "8"
Ошибка "error C2446: :: нет преобразования "int" в "char *" C++
Ошибка "error C2109: для индекса требуется массив или указатель" C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
14.08.2013, 13:22     error C2105: для "++" требуется левостороннее значение #18
Цитата Сообщение от nexen Посмотреть сообщение
почему?
C++
1
void* pv = pi; // ok: неявное преобразование из int* в void*
Yandex
Объявления
14.08.2013, 13:22     error C2105: для "++" требуется левостороннее значение
Ответ Создать тему
Опции темы

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