C ++正向声明结构在.h文件中并在.cpp文件中定义结构

时间:2014-01-09 13:47:49

标签: c++

我希望在头文件中声明一个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从其他结构继承是很重要的。我想隐藏尽可能多的实现细节。

1 个答案:

答案 0 :(得分:4)

您可以使用指向结构的指针。但是,您不能使用MyStruct类型的值,因为编译器在没有结构定义的情况下不知道结构的大小/布局。由于结构定义隐藏在.cpp文件中(因此在编译器处理main.cpp时不是“可见”):

MyStruct* structTest;
你的main.cpp中允许

,而

 MyStruct structTest;

不是。此外,还有:

void foo() {
    MyStruct* test;
    test->someFunc();
}
如果将它放在main.cpp中,

将无法编译,原因相同。您应该将结构定义放在标题中,或者使用PIMPL作为其他注释者之一。