1. 问题描述
今天在项目中包含了#include <vector>
和#include <iostream>
时,竟然出现函数未声明的编译错误:
/home/gec/work/rv1126_rv1109_linux_201109/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/include/c++/8.3.0/bits/basic_string.h:1930:31:
error
: ‘__glibcxx_requires_string_len’was not declared
in this scope
__glibcxx_requires_string_len(__s, __n2);
2. 问题产生原因
之所以在包含这两个常用的c++头文件时出现有c++源码里面的函数出现未定义,是因为我的工程文件中新建了一个debug.h的头文件,而c++源码中同样也用到debug.h这个头文件,于是两个头文件发生冲突,导致c++源码在进行编译的时候,包含了错误的debug.h,导致函数出现未声明错误。
总的来说,问题产生的原因就是:头文件名称冲突了。
3. 解决办法
将项目中用到的debug.h改名即可解决问题。
4. 总结
下次再遇到这种情况:
1. 包含某个头文件,然后进行编译。
2. 编译出现函数未声明错误。
就可以马上联想到是不是头文件名称冲突。
然后,
直接根据编译提示去到函数未声明的地方,找到其所在的头文件
,就可以知道是哪个头文件出现了名称冲突。
最后,
将其中一个头文件改名
即可解决问题。