C++ cout不命名类型,尽管包装了函数和命名空间std
我在main()中遇到了错误“cout不命名类型”(第36行ie main function)以及一些其他错误 所有代码都很好地包装在函数中,我已经使用了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)
使用名称空间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;
}