让我有两个.cpp
个文件:a.cpp
和b.cpp
,其中包含类别defenition,如下所示:
//a.cpp
class A
{
public:
A(){ \\some actions }
}
//b.cpp
class A;
class B : A
{
public:
B():A(){ \\some actions }
}
但在编译期间,我发现了一个错误。错误的描述是:
ConcreteSubject.cpp:5:25:错误:无效使用不完整类型'类 主题'ConcreteSubject.cpp:3:7:错误:'类的前向声明 Subject'ConcreteSubject.cpp:在构造函数中 'ConcreteSubject :: ConcreteSubject()':ConcreteSubject.cpp:21:38: 错误:类型'主题'不是'ConcreteSubject'的直接基础
是否可以避免#include "a.cpp"
?
答案 0 :(得分:2)
您应该将A的类声明移动到头文件,并将该头文件包含在b.cpp
文件中。如果不这样做,b.cpp编译单元无法知道类A实现(显式或隐式)的构造函数列表。
包含cpp文件不是一个好主意。你不应该这样做。
//a.h
class A
{
public:
A();
}
//a.cpp
A::A(){ \\some actions }
//b.cpp
#include "a.h"
class B : A
{
public:
B():A(){ \\some actions }
}