寻找方程的根

时间:2019-01-02 21:08:32

标签: c++

我正在尝试用C ++定义算法,但是有一个我不明白的错误 我希望我的算法找到第二阶方程的根,并给出解决方案的清单...

我已经定义了nbRacines,它给出了根数,并且工作正常。 这就是我的定义...

list<float> Racines (float a,float b, float c)
{
    float discr=b*b-4*a*c;
    float li={};

    if (nbRacines(a,b,c)==2)
    {
        li={((-b-sqrt(discr)/2*a),((-b-sqrt(discr)/2*a)))};
    }

    if (nbRacines(a,b,c)==1)
    {
        li={(-b/2*a)};
    }

    return li;
}  

它给出了这个错误...

$ g++ -Wall -pedantic -std=c++0x -c -Werror definitionsFonctions.cpp
definitionsFonctions.cpp: In function ‘std::__cxx11::list<float> 
Racines(float, float, float)’:
`definitionsFonctions.cpp:269:10: error: could not convert ‘li’ from ‘float’ to 
‘std::__cxx11::list<float>’
   return li;
          ^~
Makefile:8: recipe for target 'definitionsFonctions.o' failed
make: *** [definitionsFonctions.o] Error 1

1 个答案:

答案 0 :(得分:2)

您有一个声明为float li的对象,并尝试将其用作函数的返回值。您还尝试为其分配一个值序列。这将不起作用,并且将使用operator,而不是您想要的。要解决此问题,请直接返回列表:

std::vector<float> Racines (float a, float b, float c)
{
    float discr=b*b-4*a*c;

    switch(nbRacines(a,b,c))
    {
        case 2: return {-b-sqrt(discr)/2*a, -b-sqrt(discr)/2*a};
        case 1: return {-b/2*a};
        throw std::logic_error("quadratic equations have two roots");
    }
}  

算术注1:所有二次方程都有两个根,有些方程只有两个等于

算术注释2:我认为您的意思是将-b+sqrt(discr)/2*a作为两个元素列表的元素之一返回

样式注释:std::vector是比std::list更好的默认容器。您仅应在需要list属性时使用它(缺少参考无效)。