C/C++ 开发中的BUG列表及其解决方法

编译报错

  1.  bug:vtable for *** 为定义的引用。
     原因:存在虚函数没有被实现。
     解决:将所有的定义为虚函数都实现。
    
  2.  bug:expected type -specifier before。
     原因:没有引入相关的头文件。
     解决:引入相关的头文件即可。
    
  3.  bug:c++ class does not name a type。
     原因:引用的类头文件未包含或者**类名错误**;引用类的命名空间未包含;循环引用头文件。
     解决:正确引入类头文件、命名空间,或者使用前置声明。
    
  4.  bug:expected constructor,destruction,or type conversion before 'typedef' 。
     原因:使用前置声明,cpp文件引入本类头文件前没有包含前置声明类的头文件。
     解决:先引入前置声明类的头文件。
    
  5.  bug:error: no matching function for call to 'QVBoxLayout::addWidget(CaptionLabel*&)'
     代码如下
    
void CTestWidget::onLayout(CaptionLabel* caption)
{
	QVBoxLayout* layout = new QVBoxLayout(this);
	layout->addWidget(caption);
	
}
	原因:这里没有报CaptionLabel未定义,因为代码中声明了该类,却没有引入该类的定义,故有此错误
	解决:引入相应的头文件即可
  1.  bug:c++项目链接c的静态库时,报错:undefined reference to
     原因:c++的命名机制会将调用的库函数改名称
     解决:必须在c库函数前加上 extern “C”,也可以在C++代码中引用c库函数时使用extern "C"包含,形式如下:
    
extern "C"
{
#include "libxxx.h"
}
  1.  bug: error: parameter name omitted
     原因:gcc编译C函数报错,函数定义时形参不能为空
    

运行报错

  1. 网络编程recvfrom报错,errno 22,如图:
    errno 22
    为解释清楚,下面贴入部分源码:
    recvfrom调用源码
    此处的原因是recvfrom的第六个参数fromaddrlen没有赋值,这个参数为值-结果参数,不能随便填。
    奇怪的是,有时候又不会报错。

解决:
改成如下即可:
解决errno 22
水印遮挡住,这里手打下:socklen_t fromaddrlen = sizeof(fromaddr);

以上问题在stack overflow上也有提到,下面是主要解释:
stackoverflow

  1. 网络编程加入多播组失败,如图:
    mcast_join
    原因
    此处是构建多播组结构体时未指定正确的多播组IP,如下:
    addr.sin_addr.s_addr使用0为多播组IP
    在这里插入图片描述
    在这里插入图片描述

解决
故,加入多播组一定要指定正确的多播组IP,多网卡情况下需要指定本地IP或者指定外出网口

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值