【发布时间】:2020-11-05 07:48:12
【问题描述】:
我想将类定义和声明分成 2 个单独的文件:foo.hpp 和 foo.inl。
foo.hpp 文件有Foo 类声明及其'描述,并且这个文件还包括foo.inl:
/* foo.hpp */
// Foo class description comment
class Foo;
#include "foo.inl"
foo.inl 包含 Foo 定义,没有任何代码描述 cmets。
/* foo.inl */
class Foo {
Foo() = default;
void bar() {
/* do something */
}
}
我正在尝试在foo.hpp 中为Foo 的方法写评论,使其看起来像这样:
/* foo.hpp */
// Foo class description comment
class Foo;
// This is my default constructor
Foo::Foo();
// This is my very helpful function
Foo::bar();
#include "foo.inl"
但是编译器给出了一个可以理解的错误:invalid use of incomplete type 'class Foo'。
那么有什么方法可以声明函数并以这种方式为它们编写 cmets 吗?
【问题讨论】:
-
什么是
.inl文件?这个约定是从哪里来的?这种风格对我来说真的没有任何意义,它违背了很多 C++ 约定。为什么不像大多数 C++ 代码库那样.cpp和.hpp(或.h)? -
Foo::bar();是一个函数调用,而不是一个函数定义,并且它被调用的只是一个前向声明,所以它实际上无法编译任何东西。 -
.inl文件用于将模板类和函数声明与.hpp文件中的定义分开。所以.hpp文件包含声明,.inl文件包含定义。 -
在您的示例中,声明和定义都在
foo.inl中。 C++ 不允许对类成员进行任何类型的单独声明。 -
再一次,这个约定是从哪里来的?这不是我以前见过的,也没有任何意义。这里有什么好处?
标签: c++ class declaration