文章目录
- 1、error: ‘__s_getMD5Sum’ is not a member
- 2、Field has incomplete type
- 2.1 处理方案1:使用前置声明
- 2.1 处理方案2:使用静态变量
- 3、无法访问基类的public函数
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();
}