forward声明静态函数c ++

Mat*_*ten 8 c++

我想在另一个文件中声明一个类的静态成员函数.我想做的事情看起来像这样:

BigMassiveHeader.h:

class foo
{
    static void init_foos();
}
Run Code Online (Sandbox Code Playgroud)

Main.cpp的:

class foo;
void foo::init_foos();
int main(char** argv, int argc)
{
    foo::init_foos()
}
Run Code Online (Sandbox Code Playgroud)

这失败了"错误C2027:使用未定义类型'foo'"

有没有办法完成我想做的事情,使init_foos成为一个自由函数,或包括BigMassiveHeader.h?(BigMassiveHeader.h显着影响编译时间,并且包含在任何地方.)

Dav*_*eas 10

您无法转发声明类的成员,无论它们是否为静态.

  • 严格地说,C++的说法没有"前向声明"这样的术语.一般来说,"前向声明"通常意味着"声明没有定义".考虑到这一点,可以"转发声明"成员函数.每当你*定义一个类时,你就"向前声明"它的[非内联]成员函数.正确的答案是:你不能*声明*一个没有*定义*类的类成员.James McNellis删除的答案实际上是正式的答案. (7认同)
  • @AndreyT:标准第27.2节标题为"前向声明",TC++ PL特别版中有一个索引条目. (2认同)

Bri*_*ndy 5

你不能转发声明你的类的成员,但你可以在该命名空间内创建一个命名空间和一个函数,然后转发声明。

namespace nsfoo
{
     void init_foos();
}
Run Code Online (Sandbox Code Playgroud)

如果需要,您的班级可以使用此功能。