尽管包装了函数和命名空间std,cout仍未命名类型

时间:2019-06-01 19:28:03

标签: c++

我收到错误“ 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;   
}

sequence of errors

2 个答案:

答案 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;
}