2012-07-22 112 views
0

我试着写一个函数命名ComputeMaximum有两个参数,这两个类型的指针不断的双重的,并返回指针类型翻番从常量的指针返回指针双打双打

我不断收到以下转换错误:

  1. 从无效转换 'const的双*' 到 '双*'
  2. 不能转换 '双' 到 'const的双*' 的参数 '1' 到“双* ComputeMaximum(常量双*,常量双*)'
#include <iostream> 
using namespace std; 

double *ComputeMaximum(\2) 
{ 
} 

int main() 
{ 
    double *max; 


    return 0; 
} 
+0

1)您试图将const指针转换为非const(bad!),2)您正在比较指针值而不是它们指向的值。 – tenfour 2012-07-22 13:52:39

回答

1

,如果他真的想通过指针,并返回一个指针(想不出为什么,除非这是作业)如果你想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; 
} 
+0

感谢!!!!!!!!!!!!! – blitzeus 2012-07-22 14:15:20

2

6.4, 6.9是浮点文本(或)的恒定值,并且不能被转换为指针。你需要的仅仅是double作为函数的参数类型,而不是double*

指针指向位置的地址,不能保存值本身。所以,尽量

double ComputeMaximum(const double num1, const double num2) 
// Notice * are removed. 
{ 
    // .... 
} 
+0

想不出他说'双A = 6.4;双b = 6.9;最大= ComputeMaximum(一,&b);'? – 2012-07-22 13:48:06

+0

是的,那么它是正确的。但在return语句OP具有比较指针指向而不是指向它的自我。 – Mahesh 2012-07-22 13:48:54

+0

如果ComputeMaximum必须包含的内容只有一条语句的值,并且必须使用无文字值,IFS,开关,循环功能,比它的两个形式参数,加法,减法,乘法,或部门的其他变量。 – blitzeus 2012-07-22 14:03:59

0

你有一个无效的PARAM,编译器将不允许这种隐式转换:

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值,或更改你的方法声明,或使用引用,如果你想效率:

0

替代马赫什的很好的解决方案,您可以在调用ComputeMaximum函数之前将变量中的双精度值存储在变量中,然后使用运算符&的地址将其在内存中的位置返回。

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); 
} 
0

你也可以用const_cast投常量值非const的价值观,但这几乎总是一个坏主意。唯一合法的用途是与传统库接口,期望字符串作为非常量字符指针,但实际上并不修改它们。