gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:55:06 25 4
gpt4 key购买 nike

我希望在 header 中转发声明一个结构,然后在源文件中隐藏实现。

结构体.h

...

struct MyStruct;

...

我的结构.cpp

#include <mystruct.h>
...

struct MyStruct : virtual SomeOtherStruct, virtual AndAnotherStruct {};

...

但是当我尝试实例化 MyStruct 时:

主要.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com