Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
求方程的根 我试图在C++中定义一个算法,但是有一个我不能理解的错误。 我想让我的算法找到一个二次方程的根,然后把解列出来_C++ - Fatal编程技术网

求方程的根 我试图在C++中定义一个算法,但是有一个我不能理解的错误。 我想让我的算法找到一个二次方程的根,然后把解列出来

求方程的根 我试图在C++中定义一个算法,但是有一个我不能理解的错误。 我想让我的算法找到一个二次方程的根,然后把解列出来,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
,它给出了根的数量,并且工作正常。 这就是我的定义

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;
}  
列出浮点数(浮点数a、浮点数b、浮点数c)
{
浮盘R=b*b-4*a*c;
float li={};
如果(丁腈橡胶(a,b,c)==2)
{
li={(-b-sqrt(discr)/2*a),(-b-sqrt(discr)/2*a));
}
如果(nbRacines(a,b,c)==1)
{
li={(-b/2*a)};
}
返回李;
}  
它给出了这个错误

$ 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
$g++-Wall-pedantic-std=c++0x-c-Werror definitionsFonctions.cpp
函数“std::u cxx11::list”中的definitionsFonctions.cpp:定义
Racines(浮动,浮动,浮动)':
`定义函数。cpp:269:10:错误:无法将“li”从“float”转换为
'std::uu cxx11::list'
返回李;
^~
Makefile:8:目标“definitionsFonctions.o”的配方失败
make:**[definitionsFonctions.o]错误1

您声明了一个对象
float li
,并尝试将其用作函数的返回值。您还尝试为其分配一系列值。这将不起作用,并将使用
运算符,
而不是您想要的。要修复此问题,请直接返回列表:

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");
    }
}  
std::向量Racines(浮点a、浮点b、浮点c)
{
浮盘R=b*b-4*a*c;
开关(丁腈橡胶(a、b、c))
{
案例2:返回{-b-sqrt(discr)/2*a,-b-sqrt(discr)/2*a};
案例1:返回{-b/2*a};
抛出std::逻辑_错误(“二次方程有两个根”);
}
}  
算术注释1:所有二次方程都有两个根,有些方程只有两个相等的根

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


样式说明:
std::vector
是比
std::list
更好的默认容器。只有在需要其属性(缺少引用无效)时才应使用
list

float li={}
创建一个
浮点
,而不是
列表
。如何修复它?
float li={}表示
浮动li=0。您可能需要
列表li取而代之。(请注意,我只提到了
std::list
,因为您使用它作为返回类型。我认为应该改用
std::vector
)请注意。要进一步了解@Damien的评论,有一个严重的括号问题。例如,
-b/2*a
不同于
-b/(2*a)
,平方根也是如此。好吧,但我对这一点非常陌生,我不能说我理解你解释的内容。。。所以通过改变float li={};列出李;我的算法有效,但当我试图找到一个有1个根的方程的根时,它给了我正确的答案,但当我试图找到一个有2个根的方程的根时,它给了我错误的答案,它只给了我一个答案注:是的,我的意思是-b+sqrt(discr)/2*a具体地说,我不理解你谈论向量时的部分,也不理解为什么我不应该使用列表,因为我没有学习向量是
(-b-sqrt(discr)/2*a),(-b-sqrt(discr)/2*a))
的含义与
-b-sqrt(discr)/2*a
完全相同,因为
在这种上下文中计算左侧,丢弃结果,然后计算右边的值。C++有“以貌取人”的规则,它基本上说编译器被允许省略程序中没有作用的部分,比如计算一个数,然后丢弃它。