[Ошибка] ld вернул 1 статус выхода из функции

Я пытаюсь создать программу для вычисления вывода уравнения 2-й степени с использованием функций, но Dev C++ продолжает выдавать мне вывод «[Error] Id вернул 1 статус выхода». Я новичок в C++, заранее извиняюсь, если допустил глупые ошибки.

#include <iostream>
#include <cmath>
using namespace std;

float equation1 (float, float, float);
float equation2 (float, float, float);

main()
{
    float a, b, c, Res1, Res2;
    cout << "Insert the parameters of the equation.\n";
    cin >> a >> b >> c;
    if (a == 0)
    {
        Res1 = b / c;
        cout << "It's a 1st degree eq. and the result is " << Res1 << endl;
    }
    else
    {
        Res1 = equation1 (a, b, c);
        Res2 = equation2 (a, b, c);
        cout << "The results of the eq. are " << Res1 << " and " << Res2 << endl;
    }
    system ("pause");
    return 0;
}

float equation1 (double a, double b, double c)
{
    float D, Res1;
    D = (b * b) - 4 * a * c;
    Res1 = (- b + sqrt(D)) / (2 * a);
    return Res1;
}

float equation2 (double a, double b, double c)
{
    float D, Res2;
    D = (b * b) - 4 * a * c;
    Res2 = (- b - sqrt(D)) / (2 * a);
    return Res2;
}

person Sam    schedule 15.05.2017    source источник
comment
Добро пожаловать в Stack Overflow. Пожалуйста, найдите время, чтобы прочитать Тур и обратиться к материалам из Справочный центр что и как здесь можно спросить.   -  person πάντα ῥεῖ    schedule 15.05.2017
comment
Я думаю, вы, вероятно, хотели написать int main(){ ...}. Во-вторых, компоновщик не смог найти определение equation1(float, float, float), а также equation2(float, float, float). Обратите внимание, что определенная функция float equation1(double, double, double) перегружает ваше первое объявление.   -  person WhiZTiM    schedule 15.05.2017
comment
@WhiZTiM Что мне делать, чтобы избежать перегрузки?   -  person Sam    schedule 15.05.2017
comment
... И после компиляции вы наверняка заметите, что проверяете не c != 0 (вы получите деление на ноль в Res1 = b / c;) и D >= 0 при попытке получить его sqrt().   -  person Todor Simeonov    schedule 15.05.2017
comment
@Sam - у вас есть аргументы float в верхнем объявлении и аргумент double там, где находятся тела функций.   -  person Todor Simeonov    schedule 15.05.2017
comment
Обычно первая буква всех переменных делается строчной. Вместо этого было бы неплохо сделать Res1 равным res1.   -  person AppWriter    schedule 15.05.2017


Ответы (1)


Измените типы в определениях функций. Вы используете double, а затем С++ ожидает работать с float (менее точной, чем double).

float equation1 (float a, float b, float c)
{
    float D, Res1;
    D = (b * b) - 4 * a * c;
    Res1 = (- b + sqrt(D)) / (2 * a);
    return Res1;
}

float equation2 (float a, float b, float c)
{
    float D, Res2;
    D = (b * b) - 4 * a * c;
    Res2 = (- b - sqrt(D)) / (2 * a);
    return Res2;
}
person Sebastian Garavano    schedule 15.05.2017
comment
Спасибо всем за добрые ответы! Я думал, что float и double можно рассматривать как одно и то же, мой плохой. - person Sam; 15.05.2017