类的前向声明之后的类成员函数定义,在类声明之前
class member function definition after forward declaration of class, before class declaration
我在定义成员函数时遇到了编译问题。 有没有办法在类声明之前定义成员函数,但使用前向声明?
错误:未使用不完整的类型"类 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 成员函数
成员函数可以在其类定义中定义,
- 在这种情况下,它是一个内联成员函数,或者如果它已被声明但未在其类定义中定义,则可以在其类定义之外定义。
因此,类定义首先是用上述任一方式定义成员函数所必需的。
相关文章:
- 如何在C++中声明/定义相互依赖的模板?
- C++概念是否允许我的类在声明/定义中指定它满足某些概念?
- MSVC:无法识别的模板声明/定义(使用 Clang/GCC 编译)
- 我可以重用同一个模板来声明/定义多个东西吗(而不复制模板代码)
- C++-模板类中模板函数的单独声明/定义
- 在C 中使用继承时,请避免使用未缴纳的函数声明/定义
- C++模板能否确定所声明/定义的实例是否为常量
- 如何在程序中声明/定义一次并在两个类中使用映射列表
- LBNF,C函数声明/定义,减少冲突
- 声明/定义返回具有自动返回类型的 valarray 的函数时的隔离错误
- #用{}和声明定义混淆
- CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)
- C++ 从一个源文件中声明/定义的变量从另一个源文件访问另一个源文件
- 无法识别的模板声明/定义
- 只在.cpp中声明/定义静态方法可以吗
- 声明/定义自定义类定制对象的正确方法
- typedef声明定义未命名类时链接失败
- 用visual c++实现COM对象的声明/定义和实例化
- VS 2012中的显式模板声明/定义
- 命名空间内的友元函数声明/定义