什么是c ++中的前向声明?

时间:2011-02-07 20:20:45

标签: c++ forward-declaration

This answer说:

  

......最后,

typedef struct { ... } Foo;
     

声明一个匿名结构并为其创建一个typedef。因此,使用此构造,它在标记名称空间中没有名称,只有typedef名称空间中的名称。这意味着它也无法向前宣布。如果要进行前向声明,则必须在标记名称空间中为其命名。

什么是前瞻性声明?

5 个答案:

答案 0 :(得分:16)

Chad给出了很好的字典定义。前向声明通常在C ++中用于处理循环关系。例如:

class B; // Forward declaration

class A
{
    B* b;
};

class B
{
    A* a;
};

答案 1 :(得分:7)

“在计算机编程中,前向声明是程序员尚未给出完整定义的标识符(表示类型,变量或函数等实体)的声明。”

- Wikipedia

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