从另一个模块调用基类构造函数

时间:2014-05-03 11:33:10

标签: c++

让我有两个.cpp个文件:a.cppb.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"

1 个答案:

答案 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 }
}