gpt4 book ai didi

c++ - C 头文件不能用 C 编译,但可以用 C++ 编译

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:40 25 4
gpt4 key购买 nike

我有以下 block 头文件 BKE_mesh.h:

/* Connectivity data */
typedef struct IndexNode {
struct IndexNode *next, *prev;
int index;
} IndexNode;
void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace *mface,
const int totvert, const int totface);
void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge *medge,
const int totvert, const int totedge);

请注意,头文件是为在 C++ 文件中使用的可能性而准备的,因为它有:

#ifdef __cplusplus
extern "C" {
#endif

在文件的顶部,所需的完成在底部。但是实现它的类是用 C 语言编写的。

接下来,每当我尝试 #include 头文件时,我都会收到一个奇怪的错误。如果文件有一个 .cpp 扩展名,它编译得很好,没有任何提示。但是,如果我这样做:

#include "BKE_mesh.h"

在扩展名为 .c 的文件中,出现以下错误:

expected ')' before '*' token

对于最后两个函数,具体来说,变量:

ListBase **map

在两个类(class)。 (请注意,在头文件的前面,它声明了但未定义 ListBase)。

所以,我的问题是:为什么这个有效的 C++ 代码而不是 C 代码?

谢谢。

最佳答案

在 C++ 中,您可以直接引用结构名称,但在 C 中,您需要在前面加上关键字 struct

void create_vert_face_map(struct ListBase **map, ... );

您可以通过添加 typedef 来解决这个问题。这样您就不必修改函数声明。

typedef struct ListBase ListBase;

关于c++ - C 头文件不能用 C 编译,但可以用 C++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845600/

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