代码之家  ›  专栏  ›  技术社区  ›  Leif Andersen

C头文件不会用C编译,但会用C++

  •  0
  • Leif Andersen  · 技术社区  · 14 年前

    /* 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编写的。

    接下来,每当我试图#包含头文件时,就会出现一个奇怪的错误。如果文件的扩展名是.cpp,那么它编译的很好,没有任何抱怨。但是,如果我这样做:

    #include "BKE_mesh.h"
    

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

    expected ')' before '*' token
    

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

    ListBase **map
    

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

    非常感谢。

    2 回复  |  直到 14 年前
        1
  •  6
  •   John Kugelman Michael Hodel    14 年前

    在C++中,可以直接引用结构体名称,但是在C中需要预先准备关键字。 struct .

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

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

    typedef struct ListBase ListBase;
    
        2
  •  0
  •   Yotam    14 年前

    试着为每个案例运行预处理器。 如果是这样的话,它可能暗示了“C”问题。