Вы не можете перегружать операторы для непользовательских типов.
В этом предложении
Task *finalTask = tasks + newTasks; // Тут ошибка
у вас имеет место попытка сложения двух указателей.
Для указателей оператор + не определен. Поэтому компилятор выдает сообщение об ошибке.
Вам следует ваши указатели «обернуть» в какой-нибудь класс и определить функцию operator + для этого класса.
Также, похоже, вы вообще некорректно определяете оператор. Этот оператор должен быть либо функцией-членом класса с одним параметром, либо отдельно определенной функцией с двумя параметрами, так как вы хотите перегрузить бинарный оператор +, а не унарный оператор +.
Имейте в виду, что данное выражение
int num2 = sizeof(newTasks) / sizeof(Task);
делает совсем не то, что вы думаете. Данное выражение вообще может быть равно 0, так как sizeof(newTasks) — это размер указателя, который обычно равен 4 или 8 байтам в зависимости от используемой среду выполнения программы. Значение sizeof(Task) может быть даже больше 8 байтов, в результате чего и с учетом арифметики для целых чисел вы можете получить 0.
Поэтому вы должны хранить где-то размер массива, который был выделен динамически, и на первый элемент которого указывает указатель. Например, если вы создадите свой класс, то вы можете хранить это значение в члене данных этого класса.
|
mariiiina 0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 10 |
||||
|
1 |
||||
Ошибка: Выражение должно относиться к целочисленному типу или типу перечисления без области видимости10.11.2021, 17:21. Показов 3849. Ответов 5 Метки с++ (Все метки)
if (m[i] % 2 == 1) d = d + 1; В этой строке подчёркивается m, возникает ошибка. Как это исправить? Буду очень благодарна за помощь
0 |
|
Royal_X 1185 / 833 / 317 Регистрация: 01.06.2021 Сообщений: 3,099 |
||||||||
|
10.11.2021, 21:48 |
2 |
|||||||
|
mariiiina, оператор % работает только с целочисленными переменными, а вы его используете на числа типа double. Предлагаю поменять тип динамического массива
на
нечто похожее на % действие для double float делает функция fmod() из <cmath>, но не думаю, что она нужна в вашем коде
1 |
|
Yetty |
|
10.11.2021, 21:56
|
|
Не по теме: mariiiina, напишите оригинал условия задачи
0 |
|
Royal_X 1185 / 833 / 317 Регистрация: 01.06.2021 Сообщений: 3,099 |
||||
|
10.11.2021, 22:10 |
4 |
|||
|
Yetty, видимо нужно это посчитать
1 |
|
51 / 37 / 14 Регистрация: 05.08.2016 Сообщений: 187 |
|
|
10.11.2021, 23:58 |
5 |
|
Royal_X, интересно, а если ввести русский символ, что выделит new? Добавлено через 7 минут
1 |
|
0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 10 |
|
|
11.11.2021, 11:08 [ТС] |
6 |
|
Благодарю за помощь. Разобралась ))
0 |
{
setlocale(LC_ALL, "ru");
double a, b, c, diagonal, diametr, radius;
cout << "Введите 3 стороны прямоугольного параллелепипеда: ";
cin >> a >> b >> c;
cout << "Введите радиус круга: ";
cin >> radius;
{
diametr = 2 * radius;
cout << "diametr-" << diametr << endl;
diagonal = sqrt(a ^ 2 + b ^ 2 + c ^ 2);// ВОТ ЗДЕСЬ У МЕНЯ ПОДЧЕРКИВАЕТ "А" И "2"
//НО ЕСЛИ Я ИСПОЛЬЗУЮ «INT» А НЕ» DOUBLE» ОШИБКИ НЕТ.. ПОДСКАЖИТЕ,ПОЖАЛУЙСТА КАК ИСПРАВИТЬ ЭТУ СТРОКУ.
Выдает ошибку:
Ошибка E2140 выражение должно относиться к целочисленному типу или типу перечисления без области видимости.
Загрузка…
- Remove From My Forums
-
Question
-
Hi,
I create the code:
Drawing::StringFormat^ stringFormat =Drawing::StringFormat::GenericTypographic;
StringFormat->FormatFlags |= StringFormatFlags::MeasureTrailingSpaces;
The last line do generate the error (?), but if I instead of the last line will do insert th code line:
stringFormat->FormatFlags = stringFormat->FormatFlags |
StringFormatFlags::MeasureTrailingSpaces;The compiler do work correct. But this code line is equal !
Its bug?
-
Edited by
Friday, December 19, 2014 4:47 PM
-
Edited by
Answers
-
Since this seems an IntelliSense problem, then in order to hide the error try this workaround:
#ifndef __EDG__ sf->FormatFlags |= StringFormatFlags::MeasureTrailingSpaces; #endifThe line will be greyed, however it will be executed.
-
Marked as answer by
Mike Kazakov
Saturday, December 20, 2014 10:17 AM
-
Marked as answer by

int знаковый, так что можно из консоли выдернуть отрицательное число, что очень плохо.