......最后,
typedef struct { ... } Foo;
声明一个匿名结构并为其创建一个typedef。因此,使用此构造,它在标记名称空间中没有名称,只有typedef名称空间中的名称。这意味着它也无法向前宣布。如果要进行前向声明,则必须在标记名称空间中为其命名。
什么是前瞻性声明?
答案 0 :(得分:16)
Chad给出了很好的字典定义。前向声明通常在C ++中用于处理循环关系。例如:
class B; // Forward declaration
class A
{
B* b;
};
class B
{
A* a;
};
答案 1 :(得分:7)
“在计算机编程中,前向声明是程序员尚未给出完整定义的标识符(表示类型,变量或函数等实体)的声明。”
答案 2 :(得分:3)
据我所知,在C ++中the term "forward declaration" is a misnomer.这只是一个花哨名称下的 声明 。
答案 3 :(得分:2)
fowrard声明在实际定义之前声明标识符(将其置于命名空间中)。如果在定义结构之前需要使用指向结构的指针,则需要转发结构声明。
在您链接的答案的上下文中,如果您有typedef struct {...} Foo;
,则不能在结构内或在typedef语句结束之前使用指向Foo的指针。
另一方面,您可以typedef struct tagFoo Foo;
以及之后struct tagFoo {...};
答案 4 :(得分:0)
当一个类成员使用其中一个类的引用时,需要前向声明。 E.g:
class AB; // forward declaration
class A {
public:
int j;
void sum(AB a) {
return a.i + j;
}
};
class AB{
public:
int i;
};