数据结构,顺序表的接口函数,多重定义的问题

img

img

img


这个多重定义是什么意思?我那几个函数都是在接口函数定义的,为什么会在9.12.cpp那边定义

9.12.cpp包含了sqlist.cpp,等于你的程序里有了2个sqlist.cpp的内容
正确做法
.h文件里放入程序声明,用extern修饰
.cpp包含.h
不要包含.cpp

【相关推荐】



  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7668825
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:习题 8.4 在本章第8.3.3节中分别给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数的源文件main.cpp。请完善该程序,在类中增加。。。
  • 除此之外, 这篇博客: 【自存学习笔记】Cpp自学教程(有C基础)持续更新中的 5.1交换两个数的值 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    void exchange(int& a, int& b)
    {
    int temp =a;
    a = b;
    b=temp;
    }
    //如果不使用 引用类型 作为形参 则无法通过函数修改函数外部的变量的值。
    
    int main()
    {
    	int a;
    	int b;
    cin >> a >>' ' >>b;
    	exchange(a,b);
    	
    cout << a\n <<b<<endl;
    
    return 0;
    }
    

    5.2 引用 作为 返回值

    int& fun()
    {
    int a = 687;
    //注意 这里的a 是该函数内的 局部变量
    return a;
    }
    int main()
    {
    int& b = fun();
    //这里有警告,因为引用了 局部变量
    cout << b <<endl;
    //操作了 非法空间
    return 0;
    }
    

    所以尽量不要引用局部变量

    引用与指针的区别
    1.声明引用变量必须要初始化,指针不是必须初始化,当然我们一般int* p = NULL
    2.引用初始化之后,就不能再引用其他空间了,就定死是这个变量的别名了。而指针的指向可以后期改变
    3.引用不占用存储空间,指针占空间
    4.引用效率更高,指针是间接操作
    5.引用更安全,指针可以偏移
    6.指针更灵活,直接操作地址,指针更通用:C语言和C++都行

    总结 & 的三种作用:
    1⃣️声明引用变量
    2⃣️取地址
    3⃣️数&数 ,表示位“与”运算

    运算符一览

    参考网址:https://www.runoob.com/cprogramming/c-operators.html

    5.3增强的for循环

    C++增强的点:
    变量定义的位置可以在for(……)
    📒VC和VS结构内的定义循环控制变量的作用域有区别:
    VS(Visual Studio)中是仅针对该循环有意义
    VC(Visual C++)是对下面的全部代码有作用

    5.4 函数参数缺省值

    函数的类型:1)无参数+无返回值
    2)有参数+有返回值
    3)有参数+无/有返回值;

    其中3)1⃣️传值、传址
    2⃣️参数缺省值/默认值

    参数如何指定默认值?
    一般形式:直接在形参后面用等号赋值即可

    void fun(int a = 687,char c = 'A')
    {
    //如果不想全部赋值指定,也可以部分指定
    cout << a << ' ' << c << endl;
    }
    
    

    部分🈯️定必须注意⚠️的规则是:
    必须按照顺序“从右向左”连续指定(保证后面调用时传参位置不会错误),
    不能间隔地一会指定一会不指定!

    有默认值的函数调用时,可以不用传递实参
    没有指定默认值的,一定要指定实参

    (如果有默认值,还强制传参,会将原来的默认值覆盖)


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^