我收到错误“ cout不能命名类型”(第36行,即main函数),以及main()中的其他几个错误。
所有代码都很好地包装在函数中,我已经使用了
using namespace std;
但是我仍然在这个错误以及其他〜identifier〜这个错误中没有在主函数的这个作用域错误中声明。
代码:
#include<iostream>
#include<cmath>
using namespace std;
double discriminant (double a, double b, double c){
return (pow(b,2) - (4 * a * c));
}
double* compute_roots(double a, double b, double c){
double* x;
double x1,x2;
double d = discriminant(a,b,c);
if (d>0){
cout<<"Two real roots"<<endl;
}
else if (d=0){
cout<<"One unique solution"<<endl;
}
else
{
cout<<"Does not support complex roots";
//throw "Negative roots!";
return x;
}
x1 = (-b + sqrt(d))/(2*a);
x2 = (-b - sqrt(d))/(2*a);
x[0] = x1;
x[1] = x2;
return x;
}
int main{
double a=2.0,b=5,c=3.1;
double* res=compute_roots(a,b,c);
cout<<res[0];
cout<<res[1];
return 0;
}
答案 0 :(得分:5)
int main{
应该是
int main() {
否则,编译器会认为您正在尝试定义一个名为main
的整数变量,而不是一个函数,并且对以下代码会感到非常困惑。
此外,compute_roots
从未在使用其值之前初始化其局部变量x
,因此无法正常工作:
double* x; // ... return x;
另一个问题:
else if (d=0){
应该是d == 0
(=
是用于分配,而不是用于比较)。
答案 1 :(得分:0)
main
函数未命中()
。并且您使用d = 0
作为else if
的条件不是错误,但这不是您想要的。您也有内存泄漏。
这可能是您需要的:
#include<iostream>
#include<cmath>
#include <memory>
using namespace std;
double discriminant(double a, double b, double c) {
return (pow(b, 2) - (4 * a * c));
}
void deleter(double* x) {
delete[] x;
}
shared_ptr<double> compute_roots(double a, double b, double c) {
shared_ptr<double> x;
x.reset(new double[2], deleter);
double x1, x2;
double d = discriminant(a, b, c);
if (d > 0) {
cout << "Two real roots" << endl;
}
else if (d == 0) {
cout << "One unique solution" << endl;
}
else
{
cout << "Does not support complex roots";
//throw "Negative roots!";
return x;
}
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);
x.get()[0] = x1;
x.get()[1] = x2;
return x;
}
int main() {
double a = 2.0, b = 5, c = 3.1;
shared_ptr<double> res = compute_roots(a, b, c);
cout << res.get()[0];
cout << res.get()[1];
return 0;
}