无法将参数 '1' 的 'double' 转换为 'double*' 到 'void Swap(double*, double*)'

Posted

技术标签:

【中文标题】无法将参数 \'1\' 的 \'double\' 转换为 \'double*\' 到 \'void Swap(double*, double*)\'【英文标题】:Cannot convert 'double' to 'double*' for argument '1' to 'void Swap(double*, double*)'无法将参数 '1' 的 'double' 转换为 'double*' 到 'void Swap(double*, double*)' 【发布时间】:2014-12-08 03:45:45 【问题描述】:

我正在尝试完成一个复习问题(为即将到来的编程决赛),但是,我无法解决这个问题,因为我不断收到错误(标题)。正如预期的那样,我将发布问题以及我尝试的解决方案。

问题:

您将获得以下函数定义: 无效交换(双 * n1,双 * n2) 对于交换两个数字的函数。实现此交换功能并 从 main 调用函数,传入两个数字。打印两者的值 main 中的数字以验证您的功能是否正常工作,并且 数字被交换了。

我的回答:

void Swap(double *n1, double *n2)

    int temp;
    temp = *n1;
    cout<<temp<<endl;
    *n1 = *n2;
    *n2 = temp;
    cout<<temp<<endl;

int main()

    Swap(.99,2.1);
    return 0;

当然,我们得到了一个解决方案页面,但是,这是没有给出解决方案的问题之一。我应该怎么做/如何解决这个问题?请彻底解释给出的任何解决方案!谢谢!

【问题讨论】:

您对Swap(.99,2.1) 的期望从现在开始交换 0.99 和 2.1 的值吗? 提示:double* != double. 这两个变量应该只是交换 - *n1 变成 *n2 和 *n2 变成之前的 *n1 什么变量?你用两个常量调用函数;看不到变量。顺便说一句,在 Swap 函数中使用 integer 临时变量会导致 doubles 被破坏。 在 C++ 中传递引用的奇怪方式。 【参考方案1】:

函数参数double *n1表示必须给函数一个double的地址。但是,您试图给它加倍。

要获取double的地址,你必须创建一个变量:

double d1 = .99;
double d2 = 2.1;
Swap( &d1, &d2 );

【讨论】:

简单,切中要害!谢谢!我正在阅读我的 C++ 手册,但无法连接这些点——指针可能会让人头疼。 您还需要将Swap 中的临时更改为double 而不是int 在你了解了这个函数是做什么的之后,你应该在以后的项目中使用using std::swap; swap(d1, d2);

以上是关于无法将参数 '1' 的 'double' 转换为 'double*' 到 'void Swap(double*, double*)'的主要内容,如果未能解决你的问题,请参考以下文章

无法将“UnsafePointer<Double>”类型的值转换为预期的参数类型“UnsafePointer<_>”

为啥此代码显示“无法将 'double' 转换为 'double*'”错误?

从 double 到 const int 的 C++ 类型转换无法正常工作

SWIFT 4.1 无法使用类型为“(字符串?)”的参数列表调用类型“Double”的初始化程序

无法将 Double 转换为 String

无法将类型 double 隐式转换为 int