我在定义成员函数时遇到了以下编译问题。有没有一种方法可以在类声明之前定义成员函数,但可以使用前向声明?
错误:无效使用了不完整的类型“类GetErrorLogInterfaceTest”
class GetErrorLogInterfaceTest; // forward declaration of class
void GetErrorLogInterfaceTest::initializeJsonFile() { // member function definition
}
class GetErrorLogInterfaceTest : public ::testing::Test {
public:
void initializeJsonFile(); // member function declaration
}
答案 0 :(得分:1)
不。不能定义不完整类的成员函数。只能定义已经定义的那些类的成员函数。向前声明还不够。
标准在[class.mfct]中说:
成员函数可以在其类定义中定义(11.4),在这种情况下,它是一个内联成员 函数(10.1.6),或者可以在其类定义之外定义(如果已经声明),但不能 在其类定义中定义的 。 ...
现在,该规则没有不说成员功能只能在这两个地方定义,因此除非您知道标准没有其他允许成员的规则函数定义在其他地方(据我所知不是),那么它本身并不是技术上完整的信息。
但是,该段继续
...成员函数定义除外 出现在类定义之外的内容,但类成员函数的显式专门化除外 模板和成员函数模板(17.8)出现在类定义之外,成员函数 不得重新声明。
请注意,不得在类定义中声明成员函数。如果成员函数是在类定义之前定义的,则类定义内的函数声明将是 redeclaration ,并且将违反此规则。
答案 1 :(得分:1)
不。该标准也涵盖了这个琐碎的方面。
摘自CPP草案(N4713)
12.2.1成员函数[class.mfct]
- 成员函数可以在其类定义中定义,在这种情况下,它是一个内联成员函数,或者如果已经声明,则可以在其类定义之外进行定义但未在其类定义中定义。
因此,首先必须以上述两种方式中的任何一种来定义成员函数。