Понятия не имею что ему не нравиться, но указывает на эту ошибку в 5-ой строке.
void poz_perv_i_posl_par_0(int* x, int n)
{
int i;
for (i = 0; i < n; i++)
if (x[i] = 0 && x[i+1] = 0)
{
printf("Порядковый номер первого элемента первой парыn i=% ", i);
break;
}
for (i = n; i = 0; i--)
if (x[i] = 0 && x[i + 1] = 0)
{
printf("Порядковый номер первого элемента последней парыn i=% ", i);
break;
}
}
Mikhailo
12.3k2 золотых знака17 серебряных знаков41 бронзовый знак
задан 6 дек 2020 в 10:34
1
Приоритеты операторов приводят к тому, что ваше
if (x[i] = 0 && x[i+1] = 0)
рассматривается как
if (x[i] = (0 && x[i+1]) = 0)
т.е. вы, получается, хотите присвоить значение 0 выражению
0 && x[i+1]
Т.е. сделать что-то вроде
5+3 = 2
присвоить 2 сумме 5+3
А вообще, просто типичная ошибка — перепутать оператор присваивания =
и сравнения на равенство ==
. Явно хотели написать
if (x[i] == 0 && x[i+1] == 0)
ответ дан 6 дек 2020 в 10:40
HarryHarry
215k15 золотых знаков117 серебряных знаков228 бронзовых знаков
kukhtikov 2 / 2 / 0 Регистрация: 16.12.2012 Сообщений: 97 |
||||
1 |
||||
Ошибка: Выражение должно быть допустимым для изменения левосторонним значением09.03.2013, 19:19. Показов 140434. Ответов 9 Метки нет (Все метки)
Условие задачи: Кликните здесь для просмотра всего текста
Создать класс «целое число». В строке if (zn % 2 = 0) компилятор указывает на zn и пишет: Выражение должно быть допустимым для изменения левосторонним значением.
0 |
Черный ворон 137 / 131 / 57 Регистрация: 31.01.2012 Сообщений: 435 |
||||
09.03.2013, 19:21 |
2 |
|||
4 |
2 / 2 / 0 Регистрация: 16.12.2012 Сообщений: 97 |
|
09.03.2013, 19:48 [ТС] |
3 |
Черный ворон, спасибо) Тупая ошибка..
0 |
Kruti 0 / 0 / 0 Регистрация: 30.12.2019 Сообщений: 1 |
||||
30.12.2019, 12:32 |
4 |
|||
Добрый день у мене такая проблема: C:UsersAdminsourcereposTreeC++TreeC++Main.cpp вот код
подскажите почему оно указывает на 36 строчку «(*t[2])->key = a[1];» ?
0 |
zayats80888 5884 / 3288 / 1351 Регистрация: 07.02.2019 Сообщений: 8,310 |
||||
30.12.2019, 12:35 |
5 |
|||
(*t[2])->key = a[1];
0 |
1642 / 1091 / 487 Регистрация: 17.07.2012 Сообщений: 5,345 |
|
30.12.2019, 12:50 |
6 |
Kruti,
0 |
Вездепух 10913 / 5909 / 1614 Регистрация: 18.10.2014 Сообщений: 14,851 |
|
30.12.2019, 12:53 |
7 |
подскажите почему оно указывает на 36 строчку «(*t[2])->key = a[1];» ? Потому что
0 |
0 / 0 / 0 Регистрация: 01.12.2020 Сообщений: 1 |
|
01.12.2020, 22:39 |
8 |
У меня такая же проблема Вот код: #include <iostream> cout << endl; for (int i = 0, q = 0; i < 6; i++) for (int i = 0; i < 6; i++) return 0; Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21?
0 |
41 / 26 / 17 Регистрация: 11.11.2019 Сообщений: 92 |
|
01.12.2020, 22:58 |
9 |
Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21? Взгляните на массив a, какой он у вас при объявлении, а затем на массив a в цикле. Вы наверное хотели использовать массив first_massiv, но не заметили.
0 |
Вездепух 10913 / 5909 / 1614 Регистрация: 18.10.2014 Сообщений: 14,851 |
|
01.12.2020, 22:58 |
10 |
Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21? Почему код не оформлен тегами? Что такое
0 |
Im writing a small change to a code in visual studio and Im getting this error:
Error (active) E0137 expression must be a modifiable L-value
C:Users...events.cpp 75
This is the piece of code I added: (In bold is the line I’m getting the error):
void EV_HLDM_MuzzleFlash(vec3_t pos, float amount)
{
dlight_t *dl = gEngfuncs.pEfxAPI->CL_AllocDlight(0);
dl->origin = pos; // ERROR HERE
dl->color.r = 255; // red
dl->color.g = 255; // green
dl->color.b = 128; // blue
dl->radius = amount * 100;
dl->die = gEngfuncs.GetClientTime() + 0.01;
}
And here is the definition of dlight
:
typedef float vec3_t[3];
typedef struct dlight_s
{
vec3_t origin;
float radius;
color24 color;
float die; // stop lighting after this time
float decay; // drop this each second
float minlight; // don't add when contributing less
int key;
qboolean dark; // subtracts light instead of adding
} dlight_t;
I don’t really understand what´s wrong. I’m defining origin
as a vector
for the struct dlight
and then I’m giving a vector
in EV_HLDM_MuzzleFlash
. I don’t understand what the problem is. Please help.
I tried changing the first line in dlight_t
to Vector
and the previous error dissapear, but I got new errors:
Error C3646 'origin': unknown override specifier
Error C4430 Missing type specifier; int is assumed Note: C++ does not support default-int
I get 46 times those 2 errors when changing from vec3_t
to Vector
.
What am I missing?
Понятия не имею что ему не нравиться, но указывает на эту ошибку в 5-ой строке.
void poz_perv_i_posl_par_0(int* x, int n)
{
int i;
for (i = 0; i < n; i++)
if (x[i] = 0 && x[i+1] = 0)
{
printf("Порядковый номер первого элемента первой парыn i=% ", i);
break;
}
for (i = n; i = 0; i--)
if (x[i] = 0 && x[i + 1] = 0)
{
printf("Порядковый номер первого элемента последней парыn i=% ", i);
break;
}
}
Mikhailo
11.6k2 золотых знака16 серебряных знаков40 бронзовых знаков
задан 6 дек 2020 в 10:34
1
Приоритеты операторов приводят к тому, что ваше
if (x[i] = 0 && x[i+1] = 0)
рассматривается как
if (x[i] = (0 && x[i+1]) = 0)
т.е. вы, получается, хотите присвоить значение 0 выражению
0 && x[i+1]
Т.е. сделать что-то вроде
5+3 = 2
присвоить 2 сумме 5+3
А вообще, просто типичная ошибка — перепутать оператор присваивания =
и сравнения на равенство ==
. Явно хотели написать
if (x[i] == 0 && x[i+1] == 0)
ответ дан 6 дек 2020 в 10:40
HarryHarry
210k15 золотых знаков114 серебряных знаков224 бронзовых знака
kukhtikov 2 / 2 / 0 Регистрация: 16.12.2012 Сообщений: 97 |
||||
1 |
||||
Ошибка: Выражение должно быть допустимым для изменения левосторонним значением09.03.2013, 19:19. Показов 131336. Ответов 9 Метки нет (Все метки)
Условие задачи: Кликните здесь для просмотра всего текста Создать класс «целое число». В строке if (zn % 2 = 0) компилятор указывает на zn и пишет: Выражение должно быть допустимым для изменения левосторонним значением.
__________________ 0 |
Черный ворон 137 / 131 / 57 Регистрация: 31.01.2012 Сообщений: 435 |
||||
09.03.2013, 19:21 |
2 |
|||
4 |
2 / 2 / 0 Регистрация: 16.12.2012 Сообщений: 97 |
|
09.03.2013, 19:48 [ТС] |
3 |
Черный ворон, спасибо) Тупая ошибка.. 0 |
Kruti 0 / 0 / 0 Регистрация: 30.12.2019 Сообщений: 1 |
||||
30.12.2019, 12:32 |
4 |
|||
Добрый день у мене такая проблема: C:UsersAdminsourcereposTreeC++TreeC++Main.c pp вот код
подскажите почему оно указывает на 36 строчку «(*t[2])->key = a[1];» ? 0 |
zayats80888 5667 / 3113 / 1299 Регистрация: 07.02.2019 Сообщений: 7,807 |
||||
30.12.2019, 12:35 |
5 |
|||
(*t[2])->key = a[1];
0 |
1642 / 1091 / 487 Регистрация: 17.07.2012 Сообщений: 5,345 |
|
30.12.2019, 12:50 |
6 |
Kruti, 0 |
Вездепух 10420 / 5692 / 1550 Регистрация: 18.10.2014 Сообщений: 14,019 |
|
30.12.2019, 12:53 |
7 |
подскажите почему оно указывает на 36 строчку «(*t[2])->key = a[1];» ? Потому что 0 |
0 / 0 / 0 Регистрация: 01.12.2020 Сообщений: 1 |
|
01.12.2020, 22:39 |
8 |
У меня такая же проблема Вот код: #include <iostream> cout << endl; for (int i = 0, q = 0; i < 6; i++) for (int i = 0; i < 6; i++) return 0; Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21? 0 |
41 / 26 / 17 Регистрация: 11.11.2019 Сообщений: 92 |
|
01.12.2020, 22:58 |
9 |
Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21? Взгляните на массив a, какой он у вас при объявлении, а затем на массив a в цикле. Вы наверное хотели использовать массив first_massiv, но не заметили. 0 |
Вездепух 10420 / 5692 / 1550 Регистрация: 18.10.2014 Сообщений: 14,019 |
|
01.12.2020, 22:58 |
10 |
Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21? Почему код не оформлен тегами? Что такое 0 |
|
|
|
C++ AMP — не комплируется пример из книги
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Member Рейтинг (т): нет |
Теперь пытаюсь поработать с C++ AMP. Windows 7, VS 2012. В программе из книги C++ AMP
#include <string> #include <iostream> #include <Windows.h> #include <memory.h> #include <stdio.h> #include <time.h> #include <amp.h> #include <ppl.h> using namespace std; using namespace concurrency; void AddArrays(int n, const double* const pA, const double* const pB, double* const pC) { clock_t start, finish, duration; start = clock(); for(int i = 0; i < n; ++i) { pC[i] = pA[i] + pB[i]; } finish = clock(); duration = finish — start; cout << duration << » pC[i] = pA[i] + pB[i]» << » Время расчета без OpenMP» << endl; } void AddArraysAmp(int n, const int* const pA, const int* const pB, int* const pC) { clock_t start, finish, duration; start = clock(); array_view<int, 1> a(n, pA); array_view<int, 1> b(n, pB); array_view<int, 1> c(n, pC); parallel_for_each(c.extent, [=](index<1> idx) restrict(amp) { c[idx] = a[idx] + b[idx]; }); finish = clock(); duration = finish — start; cout << duration << » pC[i] = pA[i] + pB[i]» << » Время расчета C++ AMP» << endl; } int main() { setlocale(LC_ALL, «»); int n = 15000; double* pA = (double*) malloc(sizeof(double)*n); double* pB = (double*) malloc(sizeof(double)*n); double* pC = (double*) malloc(sizeof(double)*n); for(int i = 0; i < n; ++i) { pA[i] = (double) i; pB[i] = (double) i; pC[i] = (double) 0; } AddArrays(n, pA, pB, pC); AddArraysAmp(n, pA, pB, pC); free(pA); free(pB); free(pC); system(«npause»); } получаю ошибки: Сообщение отредактировано: tuchin — 22.03.17, 16:23 |
Олег М |
|
Скорее всего, где-то требуется std::vector, вместо указателя Добавлено 22.03.17, 16:39 Добавлено 22.03.17, 16:44 Цитата Олег М @ 22.03.17, 16:38 array_view<int, 1> a(n, pA); Здесь требуется обычный указатель, а ты передаёшь константный, она не может найти конструктор |
tuchin |
|
Member Рейтинг (т): нет |
Попробовал исправить, убрал const, не удается скомпилировать код. Буду разбираться дальше. |
Олег М |
|
Цитата tuchin @ 23.03.17, 04:56 Попробовал исправить, убрал const, не удается скомпилировать код. Буду разбираться дальше. Сделай вот так |
tuchin |
|
Member Рейтинг (т): нет |
Не помогло |
Олег М |
|
Цитата tuchin @ 23.03.17, 16:30 Не помогло А как у тебя вообще передаются указатели на double в функцию, которая требует указатели на int? |
tuchin |
|
Member Рейтинг (т): нет |
Пробовал и так:
void AddArraysAmp(int n, const double* const pA, const double* const pB, double* const pC) { clock_t start, finish, duration; start = clock(); array_view<double, 1> a(n, pA); array_view<double, 1> b(n, pB); array_view<double, 1> c(n, pC); parallel_for_each(c.extent, [=](index<1> idx) restrict(amp) { c[idx] = a[idx] + b[idx]; }); finish = clock(); duration = finish — start; cout << duration << » pC[i] = pA[i] + pB[i]» << » Время расчета C++ AMP» << endl; } int main() { setlocale(LC_ALL, «»); int n = 3; double* pA = (double*) malloc(sizeof(double)*n); double* pB = (double*) malloc(sizeof(double)*n); double* pC = (double*) malloc(sizeof(double)*n); for(int i = 0; i < n; ++i) { pA[i] = (double) i; pB[i] = (double) i; pC[i] = (double) 0; } AddArrays(n, pA, pB, pC); free(pA); free(pB); free(pC); system(«npause»); } Даже без включения AddArraysAmp в Main возникают те же ошибки. А функция без AMP void AddArrays(int n, const double* const pA, const double* const pB, double* const pC) работает нормально. Добавлено 23.03.17, 17:29 |
Олег М |
|
Тебе нужен, насколько я понимаю, чтобы вызывался вот этот конструктор array_view (что значит restrict, я не знаю)
array_view( int _E0, const _Value_type * _Src )restrict(amp,cpu); Т.е. const double *. А у тебя — const double* const. |
tuchin |
|
Member Рейтинг (т): нет |
При int и double в функции
void AddArraysAmp(int n, const double* pA, const double* pB, double* pC) { clock_t start, finish, duration; start = clock(); //array_view<double, 1> a(n, pA); //array_view<double, 1> b(n, pB); //array_view<double, 1> c(n, pC); array_view<int, 1> a(n, pA); array_view<int, 1> b(n, pB); array_view<int, 1> c(n, pC); parallel_for_each(c.extent, [=](index<1> idx) restrict(amp) { c[idx] = a[idx] + b[idx]; }); finish = clock(); duration = finish — start; cout << duration << » pC[i] = pA[i] + pB[i]» << » Время расчета C++ AMP» << endl; } получил те же результаты |
Олег М |
|
Цитата tuchin @ 23.03.17, 18:12 //array_view<double, 1> a(n, pA); Раскоментируй это, а то, что ниже убери |
tuchin |
|
Member Рейтинг (т): нет |
void AddArraysAmp(int n, const double* pA, const double* pB, double* pC) { clock_t start, finish, duration; start = clock(); array_view<double, 1> a(n, pA); array_view<double, 1> b(n, pB); array_view<double, 1> c(n, pC); //array_view<int, 1> a(n, pA); //array_view<int, 1> b(n, pB); //array_view<int, 1> c(n, pC); parallel_for_each(c.extent, [=](index<1> idx) restrict(amp) { c[idx] = a[idx] + b[idx]; }); finish = clock(); duration = finish — start; cout << duration << » pC[i] = pA[i] + pB[i]» << » Время расчета C++ AMP» << endl; } не помогло |
Олег М |
|
Цитата tuchin @ 23.03.17, 19:24 array_view<double, 1> a(n, pA) А попробуй сделать array_view<const double, 1>, для a и b |
tuchin |
|
Member Рейтинг (т): нет |
Ошибка (активно) выражение должно быть допустимым для изменения левосторонним значением CpuGpuVS2015 e:MyProgrammingCpuGpuVS2015CpuGpu.cpp 40 |
Олег М |
|
Покажи код |
tuchin |
|
Member Рейтинг (т): нет |
Я забыл убрать const в array_view для c(n, pC). После исправления в программе
#include <string> #include <iostream> #include <Windows.h> #include <memory.h> #include <stdio.h> #include <time.h> #include <amp.h> using namespace std; using namespace concurrency; void AddArrays(int n, const double* const pA, const double* const pB, double* const pC) { clock_t start, finish, duration; start = clock(); for(int i = 0; i < n; ++i) { pC[i] = pA[i] + pB[i]; } finish = clock(); duration = finish — start; cout << duration << » — время расчета без OpenMP.» << » Результат: » << pC[2] << endl; } void AddArraysAmp(int n, const double* pA, const double* pB, double* pC) { clock_t start, finish, duration; start = clock(); array_view<const double, 1> a(n, pA); array_view<const double, 1> b(n, pB); array_view<double, 1> c(n, pC); parallel_for_each(c.extent, [=](index<1> idx) restrict(amp) { c[idx] = a[idx] + b[idx]; }); finish = clock(); duration = finish — start; cout << duration << » pC[i] = pA[i] + pB[i]» << » Время расчета C++ AMP» << endl; } int main() { setlocale(LC_ALL, «»); int n = 16000; double* pA = (double*) malloc(sizeof(double)*n); double* pB = (double*) malloc(sizeof(double)*n); double* pC = (double*) malloc(sizeof(double)*n); for(int i = 0; i < n; ++i) { pA[i] = (double) i; pB[i] = (double) i; pC[i] = (double) 0; } AddArrays(n, pA, pB, pC); AddArraysAmp(n, pA, pB, pC); free(pA); free(pB); free(pC); system(«npause»); } В результате получаю |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- C/C++: Системное программирование и WinAPI
- Следующая тема
[ Script execution time: 0,0441 ] [ 17 queries used ] [ Generated: 30.01.23, 05:47 GMT ]
if(user == USR && psw = PSW) // 2 ошибки: 1. Выражение E1037 должно быть изменяемым lvalue 2. ‘=’ левый операнд должен быть l-значением
Ошибка здесь: psw = PSW
Исходя из приоритета оператора,
user == USR && psw = PSW
становится
((user == USR) && psw) = PSW
Теперь посмотрим ((user == USR) && psw)
. Как вы думаете, каким будет результат этого выражения? Это либоtrue
или false
, который не является lvalue.
Что такое rvalues, lvalues, xvalues, glvalues и prvalues?
Простыми словами, что вы назначаете PSW
к? Это не имеет смысла, потому что левая часть этого выражения не является переменной.
Решение:
Вы можете быть удивлены этими ошибками, потому что на самом деле вы просто хотели сравнить, psw
равно PSW
, но вы случайно использовали этот оператор присваивания.
Заменить psw = PSW
с psw == PSW
.