zoukankan      html  css  js  c++  java
  • C/C++ 错误笔记-解决swap函数与标准库的std::swap函数冲突的问题

    下午写了一份代码:

    #include <iostream>
    
    using namespace std;
    
    
    // 模板1:交换基本类型的值
    template<typename T>
    void swap(T &a, T &b);
    
    //模板2:交换两个数组
    template<typename T, unsigned N>
    void swap(T (&a)[N], T(&b)[N]);
    
    //模板3:打印数组元素
    template<typename T, unsigned N>
    void printArray(T (&arr)[N]);
    
    
    int main() {
    
        int m = 10, n = 99;
        swap(m,n);
    
        cout<<m<<", "<<n<<endl;
    
        // 交换两个数组
        int a[5] = {1,2,3,4,5};
        int b[5] = {10,20,30,40,50};
        swap(a,b); // 匹配模板2
    
        // 打印数组
        printArray(a);
        printArray(b);
    
    
        return 0;
    }
    
    
    template<typename T>
    void swap(T &a, T &b) {
        T tmp = a;
        a = b;
        b = tmp;
    }
    
    
    template<typename T, unsigned N>
    void swap(T (&a)[N], T(&b)[N]) {
        T tmp;
        for (int i= 0; i<N;i++) {
            tmp = a[i];
            a[i] = b[i];
            b[i] = tmp;
        }
    }
    
    
    template<typename T, unsigned N>
    void printArray(T (&arr)[N]) {
        for (int i = 0;i<N;i++) {
            if (i == N - 1) {
                cout<<arr[i]<<endl;
            } else {
                cout<<arr[i]<<", ";
            }
        }
    }

    编译死活通不过,老是报如下错误:

    后来只能求助万能的Google,结果原因是:

    不能编译运行的原因是swap函数与标准库的std::swap函数冲突。属于调用疏忽。
    解决方法1:调用时声明名字空间,把swap(a1,a2);改成::swap(a1,a2);前加::,避免冲突
    解决方法2:改变函数名称,把自定义的函数swap改成swapABC或其它。
  • 相关阅读:
    文件系统
    MySQL中添加唯一约束和联合唯一约束
    Ubuntu(Debian)的aptitude与apt-get的区别和联系
    透明与Z序示例
    Qt Quick分组属性案例
    TextView 设置超过几行后显示省略号
    ionic list item-radio checked
    webkit的基本应用
    信号槽操作案例
    报错:tr was not declared in this scope
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/7116716.html
Copyright © 2011-2022 走看看