|
kukhtikov 2 / 2 / 0 Регистрация: 16.12.2012 Сообщений: 97 |
||||
|
1 |
||||
Ошибка: Выражение должно быть допустимым для изменения левосторонним значением09.03.2013, 19:19. Показов 140759. Ответов 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 5887 / 3291 / 1351 Регистрация: 07.02.2019 Сообщений: 8,315 |
||||
|
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 |
|
Вездепух 10948 / 5935 / 1624 Регистрация: 18.10.2014 Сообщений: 14,900 |
|
|
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 |
|
Вездепух 10948 / 5935 / 1624 Регистрация: 18.10.2014 Сообщений: 14,900 |
|
|
01.12.2020, 22:58 |
10 |
|
Почему появилась ошибка в этом месте a[i] = -10 + rand() % 21? Почему код не оформлен тегами? Что такое
0 |
Выбивает ошибку: Выражение должно быть допустимым для изменения левосторонним значением
в buffer_table.company = table[i].company; Вот весь код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <locale.h>
#include <Windows.h>
struct OfficePackagesTable
{
char name[11], company[11];
int quality, score;
};
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
short min; // Индекс минимального элемента
const short rows = 4;
OfficePackagesTable table[rows]; // Создаём объект на основе структуры OfficePackagesTable, даём ему название
OfficePackagesTable buffer_table; // Буферный объект для дальнейшей сортировки
// Ввод данных
for (int i = 0; i < rows-1; i++)
{
printf("%d. Введите -> Название | Компания | Количество | Цена n", i + 1);
scanf("%s", table[i].name);
if (!strcmp(table[i].name, "***")) break;
scanf("%s", table[i].company);
scanf("%d", &table[i].quality);
scanf("%d", &table[i].score);
}
printf("|-----------------------------------------------------------------| n");
printf("| Офисные пакеты | n");
printf("|-----------------------------------------------------------------| n");
printf("| Название | Компания | Количество | Цена | n");
printf("|----------------|----------------|------------------|------------| n");
// Выводим фактические данные
for (int i = 0; i < rows-1; i++) {
printf("| %10s | %10s | %10d |%10d | n", table[i].name, table[i].company, table[i].quality, table[i].score);
}
printf("|-----------------------------------------------------------------| n");
// Сортировка массива
for (int i = 0; i < rows - 2; i++) {
// Указываем, минимальный элемент является первым
min = i;
for (int j = i + 1; j < rows - 1; j++) {
// Если текущий элемент меньше минимального, он становится минимальным
if (strcmp(table[min].name, table[j].name) > 0) min = j; // strcmp сравнивает строки
// Перестановка первого и минимального элемента
if (min > i)
{
strcpy(buffer_table.name, table[i].name);
buffer_table.company = table[i].company;
}
}
}
}
Попробовал различные варианты, предлагаемые в интернете — никак не идёт.
Описывая Window.h столкнулся с проблемой. в приватных полях у меня лежит m_resizeable а в публичном метод IsResize(). Когда пытаюсь изменить значение m_resizeable, ide выводит ошибку на строке m_isresize = false;:
Выражение должно быть допустимым для изменения левосторонним значением
Код приведу ниже:
public:
{...}
bool IsResize() const {
bool tmp = m_isresize;
m_isresize = false;
return tmp;
}
{...}
private:
{...}
bool m_isresize;
};
Интересен тот факт, что если поменять знак = на == то ошибка исчезает, вместе с желаемым результатом
Понятия не имею что ему не нравиться, но указывает на эту ошибку в 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 ]
Первое:
Если пишите на C++ и используете заголовочные файлы С, их принято называть ctime, а не time.h
Второе:
Для псевдослучайных чисел в C++ используйте заголовочный файл random:
#include <random>
...
std::random_device rd;
std::cout << rd() % 10;
Третье:
Если вам нужен массив, используйте массив. То что вы написали — очень странный костыль.
Если нужно заполнить массив случайными числами, напишите функцию:
void fill_with_random(int* arr, size_t n)
{
random_device rand;
for (size_t i = 0; i < n; ++i)
{
arr[i] = rand() % 21 - 10;
}
}
Четвёртое:
cout << y[0][0]; //все прекрасно выводится
/*но если попробовать сделать y[0][0]+=1; то выводится ошибка "выражение должно быть допустимым для изменения левосторонним значением"*/
Естественно, так происходит потому, что в вашем классе (который и не нужен совсем) вы возвращаете число, там где ожидается ссылка:
int operator [](int i)
{
return x[i];
}
Заменить на:
int& operator [](int i)
{
return x[i];
}
Пятое:
int operator [](int i)
{
return y[i][0]; /*совершенно непонятно, какую роль здесь играет [0], и почему не работает с просто return y[i]... при изменении [0] на любое другое число, результат не меняется...*/
}
Непонятно потому, что его там и не должно быть. operator[] должен давать доступ к строке (т.е. массиву). А уже второй operator[] будет относится к массиву и возвратит ссылку на элемент.
massiv& operator [](int i)
{
return y[i];
}
Шестое:
Если нужна матрица, используйте двумерный массив и не изобретайте велосипед. Если класс всё же необходим, например, если нужно добавить методы для работы с матрицей, можно написать такой класс, используя двумерный массив:
class Matrix
{
public:
Matrix() {}
int* operator[] (size_t i)
{
return &arr[i][0]; // Указатель на первый элемент i-ой строки.
}
private:
int arr[5][5];
}
Седьмое:
Классы принято называть с большой буквы. И пожалуйста, не называйте их транслитом.
Массив — Array
Матрица — Matrix






CpuGpuAmp.zip (2,25 Кбайт, скачиваний: 320)