gpt4 book ai didi

python - 在 python 中定义数组的正确方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:29 28 4
gpt4 key购买 nike

我的模拟器 (c++) 使用 python 进行绑定(bind)。在我的 C++ 中,我定义数组如下

这是我的变量声明(在标题中)

 Ptr<Name> m_names [2];

这是我的函数声明(在标题中)

void SetName (unsigned which, Ptr<Name> name);
void SetName (unsigned which, const Name &name);

在源文件中

void Interest::SetName (unsigned which, Ptr<Name> name)
{
if (which < 2)
{
m_names[which] = name;
}
}

void Interest::SetName (unsigned which, const Name &name)
{
if (which < 2)
{
m_names[which] = Create<Name> (name);
}
}

我这样调用它(在我的主文件中):

interest->SetName (0, nameWithSequence);
interest->SetName (1, nameWithNextSequence);

结果它给出这样的错误

src/ndnSIM/bindings/ns3module.cc: In function ‘PyObject*   _wrap_PyNs3NdnData_SetName__0(PyNs3NdnData*, PyObject*, PyObject*, PyObject**)’:
src/ndnSIM/bindings/ns3module.cc:8418:62: error: no matching function for call to ‘ns3::ndn::Data::SetName(ns3::Ptr<ns3::ndn::Name>)’
src/ndnSIM/bindings/ns3module.cc:8418:62: note: candidates are:
./ns3/ndn-data.h:60:3: note: void ns3::ndn::Data::SetName(unsigned int, ns3::Ptr<ns3::ndn::Name>)
./ns3/ndn-data.h:60:3: note: candidate expects 2 arguments, 1 provided

这是 SetName 的原始 python 代码

PyObject *
_wrap_PyNs3NdnData_SetName__0(PyNs3NdnData *self, PyObject *args, PyObject *kwargs, PyObject **return_exception)
{
PyObject *py_retval;
PyNs3NdnName *name;
ns3::ndn::Name *name_ptr;
const char *keywords[] = {"name", NULL};

if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "O!", (char **) keywords, &PyNs3NdnName_Type, &name)) {
{
PyObject *exc_type, *traceback;
PyErr_Fetch(&exc_type, return_exception, &traceback);
Py_XDECREF(exc_type);
Py_XDECREF(traceback);
}
return NULL;
}
name_ptr = (name ? name->obj : NULL);
self->obj->SetName(ns3::Ptr< ns3::ndn::Name > (name_ptr));
Py_INCREF(Py_None);
py_retval = Py_None;
return py_retval;
}

我是 Python 的新手,需要基于给定代码的帮助以在 Python 中设置数组定义。谢谢

最佳答案

基于 http://ndnsim.net/getting-started.html , ndnsim 使用 pybindgen生成 python 绑定(bind)。基于http://packages.python.org/PyBindGen/tutorial.html#work-flows可以通过 3 种方式生成绑定(bind),您必须找到 ndn 使用的是哪一种。如果您必须编写 python 脚本,请验证

mod.add_function('SetName', None, ['int', '...'])

有两个不为 1 的参数(根据 http://packages.python.org/PyBindGen/tutorial.html#code-generation-script ).但我的猜测是你或 ndnsim 在你的头文件上运行 (py)gccxml。如果是这种情况,那么问题可能是 pybindgen 中的错误,因为它正在直接读取您的头文件,这不是您做错的事情。

您应该验证您的 .h 和 cpp 是否在 ndnsim 之外正确编译和构建(注释掉任何特定于 ndn 的代码)并在 main.cpp 中运行,只是为了确保它确实是一个 pybindgen 问题。

考虑发布到 http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim .

关于python - 在 python 中定义数组的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375752/

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