C/C++编译问题汇总

本文主要探讨了C/C++编程中遇到的链接错误,如未命名类型、引用问题、缺失源文件、链接顺序、函数声明与定义不一致、externC混编以及API兼容性问题。提供了解决这些问题的案例和方法。
摘要由CSDN通过智能技术生成

1 declaration of **** shadows a parameter”

主要是重定义

2 does not name a type

主要有以下原因:
a 引用的类命名空间未包含
b 引用的类头文件未包含
c 包含了头文件,或者已经前置声明了,则说明所引用的类名写错。
d 循环引用头文件

3 undefined reference to (找不到声明)快速排查

Case 1, 链接时缺少定义了XXX的源文件或者目标文件或者库文件

  • 1.1 缺源文件。
  • 1.2 缺目标文件。
  • 1.3 缺库文件。

Case 2, 链接顺序不对
多个库文件链接顺序问题。
或者是存在嵌套:链接的库文件中又使用了另一个库文件

Case 3, 函数符号修饰不一样

  • 3.1 函数定义和声明不一致。
  • 3.2 C和C++混合编程(在c++代码中链接c语言的库)。
    解决方案,加上extern "C"处理为模块,就可以了。
    3.3 编译器版本或者编译器选项不一致。

Case 4,把模板函数写进了cpp文件中

Case 5,api hinden
这种情况常见于一些开源库里面的不兼容,前面的版本这个api是可以用的,库升级后,这个版本变成了hinden了。

4 extern "C " c/c++混编

使用C++ 混编的原因:
在C++代码中调用C语言的函数或变量:当在C++代码中调用C语言的函数或变量时,需要在函数或变量的声明前添加extern "C"关键字,以指定使用C语言的命名和调用约定。这样可以避免C++的函数重载和参数类型检查机制对函数或变量的名称进行修改,从而保证能够正确地找到对应的函数或变量定义。

      在C语言代码中调用C++的函数:当在C语言代码中调用C++的函数时,由于C语言不支持函数重载和参数类型检查机制,因此需要使用extern "C"关键字来指定使用C语言的命名和调用约定。同时,需要注意在C++代码中定义的函数中不能使用C语言不支持的特性,如C++的类和虚函数等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值