0

我试图编写一个名为 ComputeMaximum 的函数,它有两个参数,都是指向常量 double 的类型指针,并返回指向 double 的类型指针

我不断收到以下铸造错误:

  1. 从 'const double*' 到 'double*' 的无效转换</li>
  2. 无法将参数 '1' 的 'double' 转换为 'const double*' 到 'double* ComputeMaximum(const double*, const double*)'</li>
#include <iostream>
using namespace std;

double *ComputeMaximum(const double *num1, const double *num2)
{
    return ((double*)num1>num2?num1:num2);  
}

int main()
{
    double *max;

    max = ComputeMaximum(6.4, 6.9);
    cout << *max;

    return 0;
}
4

5 回答 5

2

6.4, 6.9是浮点文字(或)常量值,不能转换为指针。您需要的只是double函数的参数类型,而不是double*.

指针指向该位置的地址,并且本身不能保存值。所以,试试

double ComputeMaximum(const double num1, const double num2)
// Notice * are removed.
{
   // ....
}
于 2012-07-22T13:43:14.540 回答
1

如果他真的想传递指针并返回一个指针(除非这是家庭作业,否则想不出为什么)如果你想要 const double 你需要在整个剪辑中每次使用 double 这个词之前放置

#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;
}
于 2012-07-22T14:02:01.763 回答
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选择值,或更改方法中的声明,或使用引用:

于 2012-07-22T13:50:14.080 回答
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);  
}
于 2012-07-22T13:50:22.153 回答
0

您也可以使用 const_cast 将 const 值转换为非 const 值,但这几乎总是一个坏主意。唯一合法的用途是与期望字符串作为非 const char 指针但实际上并不修改它们的遗留库交互。

于 2012-07-22T13:51:36.097 回答