正确定义python数组的方法

correct way to define array in python

本文关键字:方法 数组 python 定义      更新时间:2023-10-16

我的模拟器(C )使用python作为绑定。在我的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;
}

im im新的python中,需要在Python中设置数组定义的代码上的帮助。谢谢

基于http://ndnsim.net/getting-started.html,ndnsim使用pybindgen生成python绑定。基于http://packages.python.org/pybindgen/tutorial.html#work-flows可以生成3种方法,您必须找到一个NDN使用。如果您必须编写Python脚本,请验证

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

有两个参数而不是1(按http://packages.python.org/pybindgen/tutorial.html#code-generation-script)。但是我的猜测是,您或NDNSIM在标题文件上运行(PY)GCCXML。如果是这种情况,那么问题可能是Pybindgen中的错误,因为T直接读取您的标题文件,这不是您做错的事情。

您应该验证您的.H和CPP是否在NDNSIM之外进行编译并正确构建(评论任何NDNSpecific的代码)并在main.cpp中运行,以确保它确实是一个Pybindgen问题。

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