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

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

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

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

14.08.2013, 10:47. Просмотров 1773. Ответов 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: для "++" требуется левостороннее значение
}
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 C2041: недопустимая цифра "8" для основания "8"
Ошибка "error C2446: :: нет преобразования "int" в "char *" C++
Найти причины и способы исправления ошибки "error C2109: для индекса требуется массив или указатель" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12885 / 7271 / 810
Регистрация: 27.09.2012
Сообщений: 17,970
Записей в блоге: 2
Завершенные тесты: 1
14.08.2013, 11:01     error C2105: для "++" требуется левостороннее значение #2
C++
1
p = (int*)p + 1;
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
14.08.2013, 11:02     error C2105: для "++" требуется левостороннее значение #3
BigLow,

Не по теме:

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


Цитата Сообщение от BigLow Посмотреть сообщение
C++
1
++((int *)p);
C++
1
++((int * &)p);
DiffEreD
1427 / 764 / 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
1427 / 764 / 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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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
1427 / 764 / 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: для "++" требуется левостороннее значение
Еще ссылки по теме:

Ошибка "error C2109: для индекса требуется массив или указатель" C++
C++ Ошибка при компиляции:"C2955 "Tree": для использования класс шаблон требуется список аргументов шаблон"
Исправить ошибку error C2562: функция типа "void", возвращающая значение C++
Значение типа "void" нельзя использовать для инициализации сущности типа "int" C++
Error C2440: инициализация: невозможно преобразовать "void *" в "listnode *". подскажите, что можно сделать? C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
12885 / 7271 / 810
Регистрация: 27.09.2012
Сообщений: 17,970
Записей в блоге: 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: для "++" требуется левостороннее значение
Ответ Создать тему
Опции темы

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