编辑:我误读了你的问题。这将是您是否可以拆分头文件的问题的答案。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,但不要在头文件上拆分类。