Ошибка выражение должно относиться к целочисленному типу

Вы не можете перегружать операторы для непользовательских типов.

В этом предложении

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

Метки с++ (Все метки)


Студворк — интернет-сервис помощи студентам

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
setlocale(LC_ALL, "rus");
    srand(time(0));
    int a, i, d;
    d = 0;
    printf("Введитe колличество членов последовательности: ");
    cin >> a;
    double* m = new double[a];
    for (i = 0; i < a; i++)
    {
        m[i] = 1 + rand() % 1000;
    }
    for (i = 0; i < a; i++)
    {
        cout << "[" << i << "] = " << m[i]<<endl;
    }
    for (i = 0; i < a; i++)
    {
        if (i % 2 == 0)
        {
            if (m[i] % 2 == 1) d = d + 1;
        }
    }
    cout << "Колличество членов последовательности с чётными номерами и нечётными числами = " << d << endl;
    delete[]m;
    system("pause");
    return 0;

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. Предлагаю поменять тип динамического массива

C++
1
double* m = new double[a];

на

C++
1
int* m = new int[a];

нечто похожее на % действие для 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, видимо нужно это посчитать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand(time(nullptr));
    int n; cin >> n;
    int *m = new int[n];
    int count = 0;
    for (int i = 0; i < n; ++i)
    {
        m[i] = rand() % 1000 + 1; // 1..1000
        cout << "[" << i << "] = " << m[i] << "n";
        if (i % 2 == 0 && m[i] % 2 == 1) ++count;
    }
    delete[] m;
    cout << "Count = " << count;
}



1



51 / 37 / 14

Регистрация: 05.08.2016

Сообщений: 187

10.11.2021, 23:58

5

Royal_X, интересно, а если ввести русский символ, что выделит new?

Добавлено через 7 минут
mariiiina, Royal_X, new value_type[N] принимает значение типа size_t — беззнаковое целое, так что если ввести отрицательное значение, то вы попросите выделить огромное кол-во памяти int знаковый, так что можно из консоли выдернуть отрицательное число, что очень плохо.



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

Answers

  • Since this seems an IntelliSense problem, then in order to hide the error try this workaround:

    #ifndef __EDG__
        sf->FormatFlags |= StringFormatFlags::MeasureTrailingSpaces;
    #endif

    The line will be greyed, however it will be executed.

    • Marked as answer by
      Mike Kazakov
      Saturday, December 20, 2014 10:17 AM

Возможно, вам также будет интересно:

  • Ошибка высокая температура масла в рк рав 4
  • Ошибка выполнения неопределенное значение 8002 кумир
  • Ошибка выражение должно быть допустимым для изменения левосторонним значением
  • Ошибка высокая температура двигателя форд фокус 2
  • Ошибка выравнивания головок hp 8500

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии