C++常见异常汇总(一)

1、error: ‘__s_getMD5Sum’ is not a member

错误现象:

error: ‘__s_getMD5Sum’ is not a member of ‘boost::shared_ptr<const

在这里插入图片描述

处理方案:

是因为类型未定义成const 所致。

2、Field has incomplete type

linux下编译C++代码报错,报错信息"field has incomplete type"。这种问题一般都是在头文件对类或者结构体进行了前向声明,后面使用了该类定义了对象,导致编译报错。

原因在于前向声明类或者结构体,此时编译器还不知道定义,无法知道类内部成员,所以无法构造实例对象,因此前向声明的类或者结构体只能用来定义指针或者引用。

错误现象:

在这里插入图片描述

2.1 处理方案1:使用前置声明

前向声明的类或者结构体只能用来定义指针或者引用。

a.h 文件


class A
{
 public:
 
 protected:  //implement: override
  bool Func1();

 private:
  bool Func2();


};

b.h 文件(无需引用 a.h 头文件)



class A;

class B
{

 public:
  bool FuncB1();
  
 private:
   A * a_ptr_;
  
}

2.1 处理方案2:使用静态变量

另外,也可以使用static的方式来定义, 如:

b.h 文件(无需引用 a.h 头文件)



class A;

class B
{

 public:
  bool FuncB1();
  
 private:
   static A a_;
  
}

3、无法访问基类的public函数

原因: 子类定义时,未使用public

错误写法:


class Base
{
 public:

  bool Func1();
  
}


class Child : Base
{
 public:

 protected:  //implement: override
  bool Func1();
  
}

int main()
{

    Child  child;
    child.ShutDownSubcriber(); //无法访问
    
    return 0;
}


正确写法:


class Child : public Base
{
 public:

 protected:  //implement: override
  bool Func1();
  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛魔王的小怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值