【问题标题】:I am trying to swap two values by pass by reference there is no error occur but the compiler throw some message我试图通过引用交换两个值没有发生错误但编译器抛出一些消息
【发布时间】:2019-12-26 13:31:09
【问题描述】:

我正在尝试使用传递引用交换两个数字,但它没有执行。

#include<iostream>
using namespace std;
void swap(int,int);

    int main(){
        int x,y;
        cin>>x>>y;
        swap(x,y);
        cout<<"x= "<<x<<"y= "<<y;
        return 0;
    }

    void swap(int &x,int &y){
        int temp;
        x=temp;
        x=y;
        y=temp;
        cout<<"x= "<<x<<"y= "<<y;
    }

编译器显示此错误:

C:\Users\amitm\AppData\Local\Temp\ccu8znRO.o:swap_reference.cpp:(.text+0x49): 未定义对 `swap(int, int)' 的引用 collect2.exe:错误:ld 返回 1 个退出状态

【问题讨论】:

  • 您在声明中缺少&amp; 标志。
  • 即使你的交换函数 temp 存在错误,在分配任何值之前也会复制到 x

标签: c++ pass-by-reference


【解决方案1】:

声明void swap(int,int)的签名不等于定义void swap(int &amp;x,int &amp;y)的签名。

在调用 swap 时,只有声明 void swap(int,int) 是已知和使用的,但对于该声明,任何地方都没有定义,这就是链接器所抱怨的:

对 `swap(int, int)' collect2.exe 的未定义引用:错误:ld 返回 1 个退出状态

(错误消息中的 ld 告诉您这是一个链接器错误,而链接器错误表明您在自己的代码中的定义和声明不匹配,或者您缺少库)

您必须更改声明以匹配定义void swap(int&amp;,int&amp;);

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 2021-03-04
    • 2016-10-16
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多