我正在尝试用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
答案 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
属性时使用它(缺少参考无效)。