C ++类方法转发声明

时间:2014-01-04 08:56:07

标签: c++ cyclic-reference

有没有办法重新声明一个类来定义那些只声明了这个的方法?

EG。类似的东西:

class A
{
    void a();
    void b() {}
}

class A
{
    void a() {}
}

而不是

class A
{
    void a();
    void b() {}
}

A::a() {}    

原因是我使用在类定义中定义的方法创建了许多代码,而不使用标头。到目前为止我没有循环引用,但最近有需要。我不喜欢用Type::method语法定义一组方法,因为在后一个类定义之前只需要知道很少的方法。

所以我有点像backward declaration,在循环引用之前声明或定义几个方法,稍后定义整个类。

2 个答案:

答案 0 :(得分:3)

不,没有办法重新定义一个班级。

根据C ++语言标准,类定义是:

class-specifier:
    class-head { member-specification_opt }

标准明确指出成员规范应该在类定义中完成:

  

类的成员是数据成员,成员函数(9.3),嵌套类型和枚举器。类定义中的成员规范声明了该类的完整成员集; 其他任何成员都无法添加

此标准还给出了重新定义类的示例:

struct S { int a; };
struct S { int a; }; // error, double definition
     

格式错误,因为它定义了S两次。

答案 1 :(得分:0)

不幸的是,一旦用}关闭它,就无法再次声明该类。

你唯一能做的就是继承并定义方法。

class B : public A { a() {} } ;