如何在C中预先声明一个typedef类

例如,类A具有类B的成员.通常,为了最小化编译依赖性,我们经常使类A包含B的指针,并在类A的声明中预先声明类B.看起来像这样:

//B.h
class B
{
    ....
};

//A.h
class B;
class A
{
    B*b;
    A();
    ...
};

//A.cpp
#include "B.h"
A::A()
{
    b=new B();
    ...
};

但现在我有一个问题:如果使用typedef定义B类,如下所示:

typedef class
{
 ....
}B;

在这种情况下,先前预先声明的方法将不起作用.我应该如何预先申报A.h中的B班?

最佳答案 在代码typedef类{….} B; ,它是一个未命名的类,B是未命名类的类型别名.

如果没有定义它,就不可能声明一个未命名的类(即提供类主体);并且无法声明B是未命名类的typedef.

没有typedef的前向声明这样的东西.通常,typedef可以声明稍后完成的不完整类型的别名,但是未命名的类不能填充这些角色中的任何一个.

根据选民的反馈意见删除了进一步的建议

注意:该问题使用术语“预申报”. C标准不使用术语“预先声明”或更常见的术语“前向声明”.在标准的术语中,类的前向声明简称为类声明.如果从上下文中已经不清楚,可以通过说“不是定义的声明”来澄清这一点.

点赞