Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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++ cout不命名类型,尽管包装了函数和命名空间std_C++ - Fatal编程技术网

C++ cout不命名类型,尽管包装了函数和命名空间std

C++ cout不命名类型,尽管包装了函数和命名空间std,c++,C++,我在main()中遇到了错误“cout不命名类型”(第36行ie main function)以及一些其他错误 所有代码都很好地包装在函数中,我已经使用了 使用名称空间std; 但我仍然会收到此错误以及其他未在此作用域中声明的~identifier~在主函数中的错误 代码: #包括 #包括 使用名称空间std; 双鉴别(双a、双b、双c){ 返回(pow(b,2)-(4*a*c)); } 双*计算_根(双a,双b,双c){ 双*x; 双x1,x2; 双d=判别式(a、b、c); 如果(d>0)

我在main()中遇到了错误“cout不命名类型”(第36行ie main function)以及一些其他错误

所有代码都很好地包装在函数中,我已经使用了

使用名称空间std;
但我仍然会收到此错误以及其他未在此作用域中声明的~identifier~在主函数中的错误

代码:

#包括
#包括
使用名称空间std;
双鉴别(双a、双b、双c){
返回(pow(b,2)-(4*a*c));
}
双*计算_根(双a,双b,双c){
双*x;
双x1,x2;
双d=判别式(a、b、c);
如果(d>0){
库特
那应该是

int main() {
否则,编译器会认为您试图定义一个名为
main
的整数变量,而不是一个函数,并且会被下面的代码弄糊涂

另外,
compute\u roots
在使用其值之前从不初始化其局部变量
x
,因此无法工作:

另一个问题:


可能应该是
d==0
=
用于赋值,而不是比较)。

函数未命中
()
。您正在使用
d=0
作为
的条件,否则如果
不是错误,但不是您想要的。您还存在内存泄漏。 这可能是您需要的:

#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;
}
#包括
#包括
#包括
使用名称空间std;
双鉴别(双a、双b、双c){
返回(pow(b,2)-(4*a*c));
}
无效删除器(双*x){
删除[]x;
}
共享计算根(双a、双b、双c){
共享_ptr x;
x、 重置(新的双精度[2],删除器);
双x1,x2;
双d=判别式(a、b、c);
如果(d>0){

cout什么是第一条错误消息?请始终逐字发布实际的编译器错误和警告消息。请以文本形式发布错误消息,而不是以文本图片形式发布。很抱歉,下一次sure@SG213为什么这次不改进你的问题,而不是等待下一个问题,因为你可能已经忘记了对这个问题的建议第一个?@SG213您的代码中还有一些编译器可以检测到的其他错误,看看为什么要费心于
shared_ptr
和手动内存分配?您可以只返回一个
std::pair
。您是对的,这里不需要指针,我认为他/她出于任何原因需要指针。
double* x;
// ...
return x;
else if (d=0){
#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;
}