c++编译错误汇总

2022-03-08 14:41:16 浏览数 (1)

编译错误处理

gcc

Q:error C2059: 语法错误:”“ A:全局变量没有加分号,可能是复制粘贴导致的

Q:error: passing ‘const xx’ as ‘this’ argument discards qualifiers [-fpermissive] A:调用const对象的非const方法报错,需要在方法声明和定义加const限定符 如string InetAddress::ip_ntoa() const {} 好的编程习惯,get类方法返回都加双重const

Q:Error: no such instruction: `shlx %rdx,(%r12),%rax’ A:shlx是新的intel指令,需要能支持这类新指令的汇编器,即binutils,centos6.x不行,而7.x版本可以支持 参考链接 https://blog.csdn.net/superbfly/article/details/59514207 https://blog.csdn.net/wang_xijue/article/details/47128649

Q:switch语句 jump to case label A:作用域问题,不要在case下定义语句或者将每个case语句块用{} 包起来

Q:编译gcc9报错config.log “unrecognized command line option ‘-V’” A:原因是较高版本的gcc不支持-V参数,修改环境变量,设置默认gcc为系统版本4.x,重新编译

Q:g : unrecognized option ‘-static-libstdc ’ A:gcc4.5才引入此选项,所以必须得gcc 4.8了;而centos 6.9默认的是4.4,所以只好换centos7.x来搞,默认4.8.5;最终使用的有效指令 ../configure --disable-checking --enable-languages=c,c --disable-multilib --prefix=/path/to/software/gcc9 --enable-threads=posix

Q:gcc9.1编译测试报错 /usr/bin/ld: unrecognized option ‘-plugin’ A:原因是binutils库太旧了(负责ld链接),升级binutils

Q:gcc9编译cpp报错 test.cpp:(.text 0xa): undefined reference to `std::cout’ A:换成g 或者gcc -lstdc

Q:list-initializer for non-class type must not be parenthesized A:发生在结构体构造函数对成员变量数组进行 ({0}) 初始化,改成 {} 会按照0来初始化

Q:Error: invalid operands of types ‘const char [35]’ and ‘const char [2]’ to binary ‘operator ’ A:不能直接对 const char 相加,使用string将最左侧的 char 转换为string即可

cmake

Q:Clock skew detected. Your build may be incomplete A:make报错,make clean & make

编译警告处理

[-Wreorder]

规则:构造函数时,初始化成员变量顺序要与类声明中顺序对应

warning: backslash and newline separated by space

连接字符串,后面多了空格

[-Wunused-parameter]

有些变量声明了但暂时未使用

可以注释掉;如果要保留,使用C 17语法 [[maybe_unused]] int a;

部分情况遇到 ‘mayebe_unused’ attribute directive ignored [-Wattributes]

[-Wsign-compare]

两种不同类型比较,主要是有符号无符号

解决方法比较多:

  • 手动修改某一个类型
  • decltype. 如 decltype(s.size()) len;

[-Wnarrowing]

类型转换,降级,如从int到short

0 人点赞