Ошибка: несовместимые типы операндов

Рейтинг: -1Ответов: 2Опубликовано: 08.06.2023

Есть код

#include <iostream>
#include <fstream>

using namespace std;

bool choosing()
{
    cout << "Ввод будет через файл или консоль?\n";
    int flag;
    do
    {
        cout << "1. Файл.\n";
        cout << "2. Консоль.\n";
        cin >> flag;
    } while(flag != 1 && flag != 2);
    if (flag == 1)
        return true;
    else
        return false;
}

void registr(int msv[])
{
    cout << "Введите числа в массив (15)\n";
    for (int i = 0; i < 15; i++)
    {
        cout << "Введите " << i+1 << " элемент массива: "; cin >> msv[i];
    }
}

void task(int msv[])
{
    cout << "Необходимое произведение равно: " << msv[4] * msv[9] * msv[14] << '\n';
    for(int i = 4; i < 15; i += 5)
    {
        for(int j = i; j < 15; ++j)
        {
            msv[j] = msv[j+1];
        }
    }
    for(int i = 0; i < 15; i++)
    {
        cout << msv[i] << "  ";
    }
    cout << '\n';
}

int main()
{
    int msv [15];
    if (choosing == true)
    {
        
    }
    else
    {
        registr(msv);
        cout << "Задание выполняется.\n";
        task(msv);
    }

    return 0;
}

он еще не готов, но высвечивается ошибка в несовместимости типа операндов bool(*)() и bool и красным подчеркивается строка if(choosing~== true)

Ответы

▲ 2Принят

Измените на вызов функции choosing(). У вас написано choosing == true компилятор думает, что это переменная, а не вызов функции.

У вас должно быть

if(choosing() == true){}

а еще лучше

if(choosing())

а ещё лучше отделить ввод данных пользователем от логики и потом сделать

if(isFileInput()){} //так более очевидно что делает функция по её названию
▲ 2

Имя choosing компилятор воспринимается как указатель на функцию. А с добавлением скобочек choosing() уже как её вызов.

  bool ( * ptr ) ( ) = choosing ;
  bool result = choosing ( ) ;

исправьте так :

  if (choosing ( ) == true)