我希望在 header 中转发声明一个结构,然后在源文件中隐藏实现。
mystruct.h
...
struct MyStruct;
...
mystruct.cpp
#include <mystruct.h>
...
struct MyStruct : virtual SomeOtherStruct, virtual AndAnotherStruct {};
...
但是当我尝试实例化 MyStruct 时:
main.cpp
#include <mystruct.h>
...
MyStruct structTest;
...
我收到错误
"error: aggregate 'MyStruct structTest' has incomplete type and cannot be defined"
如何在 header 中声明结构,然后在源代码中定义它? MyStruct
继承自其他结构非常重要。我想隐藏尽可能多的实现细节。
最佳答案
您可以使用指向该结构的指针。但是,您不能使用 MyStruct 类型的值,因为编译器在没有结构定义的情况下不知道结构的大小/布局。由于结构定义隐藏在 .cpp 文件中(因此当编译器处理 main.cpp 时不“可见”):
MyStruct* structTest;
在 main.cpp 中是允许的,而
MyStruct structTest;
不是。此外,类似:
void foo() {
MyStruct* test;
test->someFunc();
}
如果放在main.cpp中,也不会编译,出于同样的原因。您应该将结构定义放在 header 中,或者使用 PIMPL,正如其他评论者之一指出的那样。
关于C++ 在 .h 文件中转发声明结构并在 .cpp 文件中定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022018/