编辑:我误读了你的问题。这将是您是否可以拆分头文件的问题的答案。LongClassName::
抱歉,避免使用 -syntaxes对您没有帮助。
简单的答案:您可以拆分 c++ 文件,但不能拆分头文件。
原因很简单。每当您的编译器需要编译构造函数时,它都需要确切知道需要为这样的对象分配多少内存。
例如:
class Foo {
double bar; //8 bytes
int goo; //4 bytes
}
new Foo()
需要分配12 bytes
内存。但是如果你被允许在多个文件上扩展你的类定义,从而拆分头文件,你很容易把它弄得一团糟。你的编译器永远不会知道你是否已经告诉了它关于类的一切,或者你是否没有。代码中的不同位置可能对类有不同的定义,从而导致分段错误或神秘的编译器错误。
例如:
h1.h
:
class Foo {
double bar; // 8 bytes
int goo; // 4 bytes
}
h2.h
: #include "h1.h"
class Foo {
double goo; // 8 bytes
} // we extend foo with a double.
foo1.cpp
:
#include "foo1.h"
Foo *makeFoo() {
return new Foo();
}
foo2.cpp
:
#include "foo2.h"
void cleanupFoo(Foo *foo) {
delete foo;
}
foo1.h
:
#include "h1.h"
Foo *makeFoo();
foo2.h
:
#include "h1.h"
#include "h2.h"
void cleanupFoo(Foo *foo)
main.cpp
:
#include foo1.h
#include foo2.h
void main() {
Foo *foo = makeFoo();
cleanupFoo(foo);
}
仔细检查如果您首先编译main.cpp
到 main.o,然后编译foo1.cpp
到foo1.o
和foo2.cpp
到foo2.o
,最后将所有这些链接在一起会发生什么。这应该编译,但makeFoo()
分配的东西然后cleanupFoo()
释放。
所以你有它,随意拆分.cpp
-files,但不要在头文件上拆分类。