作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
比如类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();
...
};
但现在我有一个问题:如果 B 的类是这样使用 typedef 定义的:
typedef class
{
....
}B;
先前预先声明的方法在这种情况下将不起作用。我应该如何在 A.h 中预先声明 B 类?
最佳答案
在代码typedef class { .... } B;
中,它是一个未命名类,B
是未命名类的类型别名。
不定义一个未命名的类是不可能的(即提供类主体);并且不可能声明 B
是未命名类的 typedef。
没有 typedef 的前向声明这样的东西。通常,typedef 可以为稍后完成的不完整类型声明一个别名,但未命名的类不能充当这些角色中的任何一个。
删除了响应选民反馈的进一步建议
注意:该问题使用了“预先声明”一词。 C++ 标准不使用术语“pre-declare”或更常见的行话“forward-declare”。在标准的术语中,类的前向声明简称为类声明。如果从上下文中还不清楚,可以通过说“不是定义的声明”来澄清这一点。
关于c++ - 如何在 C++ 中预先声明一个 typedef 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40354937/
我是一名优秀的程序员,十分优秀!