我有一个c函数,看起来像这样:
int parse_commandline_options1 (cl1_option_t co[], char ***res,
char ***last_vals, int argc, char *argv[]);
我想用Cython包装它,但是我有问题。这是我的python代码:
cdef extern from "pclo1.h":
ctypedef struct cl1_option_t:
pass
int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*)
cdef class Options:
cdef readonly cl1_option_t clo
cdef cl1_option_t Get(self):
return self.clo
property short_name:
def __get__(self):
return self.clo.short_name
property long_name:
def __get__(self):
return self.clo.long_name
def ParseCommandLine(char ***a, char ***b, char *c[]):
o = Options()
parse_commandline_options1(o.Get(), a, b, 0, c)
return o # ^ error here
Cython告诉我Cannot assign type 'char **' to 'char(*)[]'
但是我不知道这个错误意味着
虽然我不是专家,但乍一看,您似乎在解析指向数组的指针,这是预期的指针数组
int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*)
而另一个命令是:
def ParseCommandLine(char ***a, char ***b, char *c[])
这就是为什么在这个函数中有一个问题,因为类型不同。
建议修复
编辑其中一个函数,使它们匹配。我会说change:
int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*)
int parse_commandline_options1(cl1_option_t, char***, char***, int, char* [])
这应该可以解决你的直接问题,但如果它确实需要一个指针数组(如果我对代码的解释是正确的),你将需要更新该函数。
希望这有帮助,我相信更聪明的人会评论真正的原因!:)