我希望在头文件中声明一个struct,然后在源文件中隐藏实现。
mystruct.h
...
struct MyStruct;
...
mystruct.cpp
#include <mystruct.h>
...
struct MyStruct : virtual SomeOtherStruct, virtual AndAnotherStruct {};
...
但是当我尝试实例化MyStruct时:
的main.cpp
#include <mystruct.h>
...
MyStruct structTest;
...
我收到错误
“错误:聚合'MyStruct structTest'的类型不完整,但不能 被定义为“
如何在标题中声明一个结构,然后在源代码中定义它? MyStruct
从其他结构继承是很重要的。我想隐藏尽可能多的实现细节。
答案 0 :(得分:4)
您可以使用指向结构的指针。但是,您不能使用MyStruct类型的值,因为编译器在没有结构定义的情况下不知道结构的大小/布局。由于结构定义隐藏在.cpp文件中(因此在编译器处理main.cpp时不是“可见”):
MyStruct* structTest;
你的main.cpp中允许,而
MyStruct structTest;
不是。此外,还有:
void foo() {
MyStruct* test;
test->someFunc();
}
如果将它放在main.cpp中,将无法编译,原因相同。您应该将结构定义放在标题中,或者使用PIMPL作为其他注释者之一。