从类型 'MyStruct' 转换为类型 'void*' 无效
Invalid cast from type 'MyStruct' to type 'void*'
我在以下头文件中定义了一个名为Spiketimesolver
的结构:
#include <math.h>
#include "plot_support.h"
struct Spiketimesolver {
const Doub tau_0, I_0, V_start, I_start;
Spiketimesolver(const Doub tau_0, const Doub I_0, const Doub V_start,
const Doub I_start) :
tau_0(tau_0), I_0(I_0), V_start(V_start), I_start(I_start)
{}
Doub operator()(const Doub t) {
const Doub I = get_I(I_start, t, tau_0);
const Doub V = get_V(I_start, t, tau_0, I_0, V_start, I);
return 0.5 * pow((V - 1), 2);
}
};
(get_I
和get_V
在我的文件plot_support.h
中定义。它们的定义在这里无关。)
在一个单独的模块中,我如下实例化这个结构:
Spiketimesolver solver(tau_0, I_0, V_start, I_start);
这里,所有的论点都是双重的。
我想把solver
传递给我这样定义的函数:
template<class T> PyObject* NRpyObject(T &a) {
// default applies to all function objects or other structs
PyObject *thing = PyCapsule_New((void*)a,NULL,NULL);
return thing;
}
PyCapsule_New
是Python C API的一部分。它期望void *pointer
作为第一个参数。
当我尝试编译时,调用NRpyObject(solver)
:会出现以下错误
In file included from analysis_cmodule.cpp:2:0:
nr3python.h: In instantiation of ‘PyObject* NRpyObject(T&) [with T = Spiketimesolver; PyObject = _object]’:
analysis_cmodule.cpp:16:27: required from here
nr3python.h:183:52: error: invalid cast from type ‘Spiketimesolver’ to type ‘void*’
PyObject *thing = PyCapsule_New((void*)a,NULL,NULL);
^
我做错了什么?
PyCapsule_New
的第一个参数需要是指针。您正试图通过将a
强制转换为void*
来实现这一点。然而,编译器不喜欢这样。我猜你需要使用:
PyObject *thing = PyCapsule_New(&a,NULL,NULL);
相关文章:
- 具有引用返回类型的重写方法上的协变返回类型无效
- 使用 std::future 的不完整类型无效使用
- 类指针和类指针指向二进制运算符+的类型无效的操作数
- 静态类模板成员:将"sizeof"应用于不完整类型无效
- 数组的类型无效
- 返回并强制转换数组指针(错误:数组下标的类型..无效)
- 错误:数组下标'double*[double]'的类型无效
- 数组下标错误的类型无效
- 协变返回类型无效的转换错误
- 在代码块错误中收到此错误:数组下标'main()::fields[int]'的类型无效
- 3 错误:错误:未在此范围内声明'Entry'。错误:模板参数 1 无效。错误:令牌之前声明中的类型无效'('
- 类成员数组的实现:数组下标的类型无效
- 别名模板、部分专用化和无效参数类型无效
- 数组下标'int [5][float]'的类型无效
- 数组下标的类型无效
- 是否存在对类型名称有效但对基本类型无效的语言构造
- 编译错误 - 数组下标'char[int]'的类型无效
- 使用指向结构数组的指针的参数类型无效
- 使用类模板初始化下标重载函数中的引用类型无效
- 对模板和decltype使用不完整类型无效