类的前向声明之后的类成员函数定义,在类声明之前

class member function definition after forward declaration of class, before class declaration

本文关键字:声明 定义 之后 成员 函数      更新时间:2023-10-16

我在定义成员函数时遇到了编译问题。 有没有办法在类声明之前定义成员函数,但使用前向声明?

错误:未使用不完整的类型"类 GetErrorLogInterfaceTest">

class GetErrorLogInterfaceTest; // forward declaration of class
void GetErrorLogInterfaceTest::initializeJsonFile() { // member function definition
}
class GetErrorLogInterfaceTest : public ::testing::Test {
public:
void initializeJsonFile(); // member function declaration
}

No.无法定义不完整类的成员函数。只能定义已定义的类的成员函数。仅向前申报是不够的。

该标准在[class.mfct]中说:

成员

函数可以在其类定义中定义 (11.4(,在这种情况下,它是内联成员 函数 (10.1.6(,或者如果它已经被声明但未声明,则可以在其类定义之外定义在其类定义中定义。...

现在,该规则并没有说成员函数只能在这两个地方定义,所以除非你知道标准没有其他规则允许在其他地方定义成员函数(据我所知,它没有(,那么这本身在技术上不是完整的信息。

但是,该段继续

。成员函数定义除外 出现在类定义之外,并且类的成员函数的显式专用化除外 模板和成员函数模板 (17.8( 出现在类定义之外,成员函数 不得重新声明。

请注意,成员函数不应在类定义中重新声明。如果成员函数是在类定义之前定义的,则类定义中的函数声明将是重新声明,并且将违反此规则。

No.该标准也涵盖了这个微不足道的方面。

来自CPP草案(N4713(

12.2.1 成员函数

成员函数可以在其类定义中定义,
  1. 在这种情况下,它是一个内联成员函数或者如果它已被声明但未在其类定义中定义,则可以在其类定义之外定义

因此,类定义首先是用上述任一方式定义成员函数所必需的。