gpt4 book ai didi

python - 错误:函数参数不兼容

转载 作者:行者123 更新时间:2023-12-01 14:55:13 25 4
gpt4 key购买 nike

我正在使用pybind11访问我从python用C++编写的一些函数。我希望将初始化的struct实例返回给python(来自类成员函数),以便可以访问python中的实例值。我提供了源文件的简化版本。可以使用以下方法重现该错误。
这是C++包装器

#include <pybind11/pybind11.h>
#include <pybind11/stl.h>
#include "sum.h"
namespace py = pybind11;

PYBIND11_PLUGIN(GetSum) {

py::module mod("GetSum", "wrapping caltri");

mod.def("get_instance", &GetSum::get_instance, py::return_value_policy::copy, "get instance of out");

py::class_<GetSum, std::shared_ptr<GetSum>>(mod, "GetSum")
.def(py::init<>())
.def("input", &GetSum::input);

return mod.ptr();
}

这是类头 sum.h的一部分
   extern "C" {
#include "mesh.h"
}
#include<iostream>
#include<vector>

class GetSum {
struct A out;

public:
GetSum();
void input(std::vector<float>);
struct A get_instance() {
return out; };
~GetSum();

};

这是类定义sum.cpp
#include "sum.h"

GetSum::GetSum() {
out.pointlist = nullptr;
}
void GetSum::input(std::vector<float> num){
out.pointlist = new float[num.size()];
for(size_t i = 0; i < num.size(); i++)
*(out.pointlist+i) = num[i];
}

GetSum::~GetSum(){
delete [] out.pointlist;
}

结构定义:mesh.h
#include <stdio.h>

struct A {
float *pointlist;
};

这就是我在python中调用它的方式。
import GetSum
m = GetSum.GetSum()
m.input([1.0,2.0])
GetSum.s = GetSum.get_instance()

之后,我得到错误:get_instance():不兼容的函数参数。支持以下参数类型:
1.(arg0:GetSum)-> A

有人可以帮助我找出我可能要去哪里的地方吗?

谢谢!

最佳答案

您需要在pybind11上声明struct A,然后至少添加以下内容才能将其用作返回类型:

py::class_<A>(mod, "A")
.def(py::init<>());

包装代码。此外,由于 get_instance不是静态的,因此您需要在示例python代码中按以下方式调用它:
GetSum.s = GetSum.get_instance(m)

关于python - 错误:函数参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45589229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com