我想将与链表结构有关的代码移到单独的文件中。 .pyx和.c文件都使用此链接列表。
当前实现: cython_file.pyx:
ctypedef struct linked_list
ctypedef struct linked_list:
double price
double volume
int data
linked_list *next_cell
...
c_file.c:
typedef struct linked_list {
double price;
double volume;
int data;
struct linked_list * next_cell;
} linked_list;
...
我想要创建LinkedList.h
,LinkedList.c
和LinkedList.pxd
,其中将包含以下内容:
LinkedList.h:
typedef struct linked_list {
double price;
double volume;
int data;
struct linked_list * next_cell;
} linked_list;
...
LinkedList.c:
#include "LinkedList.h"
...
LinkedList.pxd:
cdef extern from "LinkedList.h":
ctypedef struct linked_list
ctypedef struct linked_list:
double price
double volume
int data
linked_list * next_cell
我想按以下方式使用它: 在cython_file.pyx中:
from LinkedList cimport *
...
并在c_file.c中:
#include "LinkedList.h"
...
当我尝试编译第二个变量时,出现错误:
LinkedList.h(1): error C2011: 'linked_list': 'struct' type redefinition
我想这个问题是由于嵌套结构引起的
答案 0 :(得分:1)
要避免使用redefinition errors
,必须在头文件中使用包含保护。
//LinkedList.h
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
...
#endif
包含防护是预处理器宏,可防止头文件的多个包含。
它基本上检查是否定义了LINKEDLIST_H
。如果是这样,它将跳过if
子句中的所有内容。否则它将定义它。
这样一来,您可以避免多次从标头中重新定义结构,这可能是导致此错误的原因。