当前位置:   article > 正文

C/C++ 开发中的BUG列表及其解决方法_expected type-specifier before

expected type-specifier before

编译报错

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

运行报错

  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或者指定外出网口

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/121237
推荐阅读
相关标签
  

闽ICP备14008679号