我有一个看起来像这样的C函数:
int parse_commandline_options1 (cl1_option_t co[], char ***res,
char ***last_vals, int argc, char *argv[]);
我想用Cython包装它,但我遇到了问题。这是我的cython代码:
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(*)[]'
,但我不知道这个错误意味着
答案 0 :(得分:1)
虽然我不是专家,但乍一看它看起来像是在解析一个指向数组的指针,期望一个指针数组
int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*)
另一个命令是:
def ParseCommandLine(char ***a, char ***b, char *c[])
这就是为什么该功能存在问题,因为类型不同。
建议修复
编辑其中一个功能以使它们匹配。我会说改变:
int parse_commandline_options1(cl1_option_t, char***, char***, int, char[]*)
到
int parse_commandline_options1(cl1_option_t, char***, char***, int, char* [])
这应该可以解决您的直接问题,但如果它确实需要一个指针数组(如果我对代码的解释是正确的话),则需要更新该函数。
希望这会有所帮助,我相信更聪明的人会评论真正的原因! :)