如何在同一个类中转发声明函数?

Hae*_*Lee 2 c++ forward-declaration

有一个类 A,所有声明和定义都放在里面,如下所示:

class A
{
  void f(); // forward declaration for a lengthy method
  ...
  void g()
  {
    f();    // call the above forward-declared method
  }
  void f()  // definition of a lengthy method
  {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我不想像 A::f() 那样将 f() 从类头中取出,但只想将所有源保留在类中。但是,当我编译它时,出现以下错误:

error C2535: 'void A::f()': member function already defined or declared
note: see declaration of 'A::f'
Run Code Online (Sandbox Code Playgroud)

难道就没有办法解决这个问题吗?

eer*_*ika 6

您不需要转发声明成员函数。并且您不能既进行前向声明,又在类定义中定义成员函数 - 如果进行前向声明,则必须在类定义之外定义成员函数。

成员函数定义位于“完整的类上下文”中,这意味着它们可以访问类的所有成员,甚至是在函数体之后声明的成员。

因此,您的示例可以通过删除 的第一个声明来修复f