在 C++ 中使用 C 结构的 malloc

malloc with C struct in C++

我正在尝试在 Catch2(一个 C++ 库)中为一个简单的 C 库示例编写一些测试,但我对如何初始化 C 结构感到有点困惑。

我的 C 头文件如下所示:

struct node;

我的 C 实现再简单不过了:

struct node {
  int num;
  struct node* next;
}

现在,问题在于测试(在 C++ 中):

#include <catch2/catch.hpp>
extern "C" {
  #include "node.h"
}

TEST_CASE("would it work?", "[foo]") {
  struct node* n = (struct node*) malloc(sizeof(struct node));
}

代码将无法编译,因为“struct node 是一个不完整的类型”。

我的问题是,在这种情况下,如何在 C++ 代码中初始化 C 结构?我做错了什么?

基本上评论里都已经说完了

您只是向前声明了 header 中的结构。虽然最好的做法是使用前向声明来减少 header 中的包含依赖项,这些依赖项只需要知道某物是什么(例如结构)而不是它包含什么,但前向声明通常没有多大意义header 中的结构实际上应该定义结构本身。

使用一个结构(包括malloc)除了需要知道它是一个指针还是一个引用之外,还需要了解该结构的定义。请注意,您的 C++ 文件只能看到包含的内容 header;它看不到 C 文件的内容。因此,header 中的前向声明应该替换为 C 文件中的结构定义,使 C 文件过时,以防它真的只是为了定义结构。