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

时间:2018-10-24 12:06:02

标签: c++

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

  

错误:无效使用了不完整的类型“类GetErrorLogInterfaceTest”

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

2 个答案:

答案 0 :(得分:1)

不。不能定义不完整类的成员函数。只能定义已经定义的那些类的成员函数。向前声明还不够。

标准在[class.mfct]中说:

  

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

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

但是,该段继续

  

...成员函数定义除外   出现在类定义之外的内容,但类成员函数的显式专门化除外   模板和成员函数模板(17.8)出现在类定义之外,成员函数   不得重新声明。

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

答案 1 :(得分:1)

不。该标准也涵盖了这个琐碎的方面。

摘自CPP草案(N4713)

  

12.2.1成员函数[class.mfct]

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

因此,首先必须以上述两种方式中的任何一种来定义成员函数。