我试着写一个名为ComputeMaximum的函数,它有两个参数,都是指向常量double的类型指针,并返回指向double的类型指针
我不断收到以下播放错误:
#include <iostream>
using namespace std;
double *ComputeMaximum(\2)
{
}
int main()
{
double *max;
return 0;
}
答案 0 :(得分:2)
6.4, 6.9
是浮点文字(或)常量值,无法转换为指针。您需要的只是double
作为函数的参数类型,而不是double*
。
指针指向位置的地址,不能保留值本身。所以,试试
double ComputeMaximum(const double num1, const double num2)
// Notice * are removed.
{
// ....
}
答案 1 :(得分:1)
如果他真的想要传递指针并返回指针(除非这是作业,否则无法思考为什么)如果你想要const double,你需要在每次使用单词double之前输入const
#include <iostream>
using namespace std;
double *ComputeMaximum(double *num1,double *num2)
{
return (* num1 > * num2 ?num1:num2); // need to dereference the comparison
}
int main()
{
double *max;
double a = 6.4;
double b = 6.9; // need to be variables with real adresses, literals won't work
max = ComputeMaximum(&a, &b); // pass pointers to a and b
cout << *max;
return 0;
}
答案 2 :(得分:0)
你有一个无效的参数,编译器不允许这种隐式转换:
max = ComputeMaximum(6.4, 6.9);
由于头文件是:
double *ComputeMaximum(const double *num1, const double *num2)
您要么传递const double *
作为参数,要么将声明更改为:
double *ComputeMaximum(const double num1, const double num2)
double *ComputeMaximum(const double &num1, const double &num2)
但是,这适用于您的情况:
double a = 6.4;
double b = 6.9;
max = ComputeMaximum(&a, &b);
如果您想要效率,您可以explicit cast
值,或更改方法中的声明,或使用引用:
答案 3 :(得分:0)
替代Mahesh的好解决方案,您可以在调用ComputeMaximum函数之前将双精度存储在变量中,然后使用addressof运算符&
将其位置返回到内存中。
double a = 6.4;
double b = 6.9;
max = ComputeMaximum(&a, &b);
但是你还需要改变你的函数来比较指向的值而不是指针本身:
double *ComputeMaximum(const double *num1, const double *num2)
{
double a = *(num1);
double b = *(num2);
return (double*)(a > b ? a : b);
}
答案 4 :(得分:0)
您也可以使用const_cast将const值转换为非const值,但这几乎总是一个坏主意。唯一合法的用途是与传统库接口,这些库期望字符串作为非const char指针,但实际上并没有修改它们。