编译 CPython 时出错:C2440 'function':无法从 'PyObject' 转换为 PyObject *'
Error when Compiling CPython: C2440 'function': cannot convert from 'PyObject' to PyObject *'
我刚开始使用 CPython(还有 C),我试图创建一个扩展模块来计算 nCk。但是,我在编译时遇到了这个非常烦人的错误。这是我的代码:
PyObject* combination(PyObject* n, PyObject* k){
PyObject* output = ONE;
return PyNumber_TrueDivide(factorial(n), PyNumber_Multiply(factorial(k), factorial(PyNumber_Subtract(n, k))));
}
static PyObject* BezierCurve_combination(PyObject* self, PyObject* args){
PyObject n, k;
if (!PyArg_ParseTuple(args, "OO", &n, &k))
return NULL;
/* This return statement is line 60*/
return Py_BuildValue("O", combination(n, k));
}
这是错误消息:
(60): error C2440: 'function': cannot convert from 'PyObject' to 'PyObject *'
(60): warning C4024: 'combination': different types for formal and actual parameter 1
(60): warning C4024: 'combination': different types for formal and actual parameter 2
导致此错误的原因是什么?一个类似的程序非常适用于阶乘函数定义(它只包含 1 个 PyObject*
参数。)我该如何解决这个问题?
你的程序中永远不能有这样的 PyObject
。它们总是 指向 到 PyObject
。
使用 PyObject *n, *k;
- 或者,如果有疑问,
PyObject *n;
PyObject *k;
此外,您必须始终检查每个和每个[=34]的return值=] 函数在 Python 异常中,除非你只是 return 从你的函数中调用它。因此你可能不会写
return PyNumber_TrueDivide(factorial(n),
PyNumber_Multiply(factorial(k), factorial(PyNumber_Subtract(n, k))));
你只能写
return PyNumber_TrueDivide(dividend, divisor);
对于内部调用,您必须检查它们是否单独为 NULL,如果它们是 NULL,则表示您必须处理或抛出异常(通过 return从你的函数中获取 NULL)。
我刚开始使用 CPython(还有 C),我试图创建一个扩展模块来计算 nCk。但是,我在编译时遇到了这个非常烦人的错误。这是我的代码:
PyObject* combination(PyObject* n, PyObject* k){
PyObject* output = ONE;
return PyNumber_TrueDivide(factorial(n), PyNumber_Multiply(factorial(k), factorial(PyNumber_Subtract(n, k))));
}
static PyObject* BezierCurve_combination(PyObject* self, PyObject* args){
PyObject n, k;
if (!PyArg_ParseTuple(args, "OO", &n, &k))
return NULL;
/* This return statement is line 60*/
return Py_BuildValue("O", combination(n, k));
}
这是错误消息:
(60): error C2440: 'function': cannot convert from 'PyObject' to 'PyObject *'
(60): warning C4024: 'combination': different types for formal and actual parameter 1
(60): warning C4024: 'combination': different types for formal and actual parameter 2
导致此错误的原因是什么?一个类似的程序非常适用于阶乘函数定义(它只包含 1 个 PyObject*
参数。)我该如何解决这个问题?
你的程序中永远不能有这样的 PyObject
。它们总是 指向 到 PyObject
。
使用 PyObject *n, *k;
- 或者,如果有疑问,
PyObject *n;
PyObject *k;
此外,您必须始终检查每个和每个[=34]的return值=] 函数在 Python 异常中,除非你只是 return 从你的函数中调用它。因此你可能不会写
return PyNumber_TrueDivide(factorial(n),
PyNumber_Multiply(factorial(k), factorial(PyNumber_Subtract(n, k))));
你只能写
return PyNumber_TrueDivide(dividend, divisor);
对于内部调用,您必须检查它们是否单独为 NULL,如果它们是 NULL,则表示您必须处理或抛出异常(通过 return从你的函数中获取 NULL)。