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

在python中定义数组的正确方法,python,c++,arrays,simulation,Python,C++,Arrays,Simulation,我的模拟器(c++)使用python作为绑定。 在C++中,我定义数组如下: 这是我的变量声明(在标题中) 因此,它会产生这样的错误 src/ndnSIM/bindings/ns3module.cc: In function ‘PyObject* _wrap_PyNs3NdnData_SetName__0(PyNs3NdnData*, PyObject*, PyObject*, PyObject**)’: src/ndnSIM/bindings/ns3module.cc:8418:62: e

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

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

因此,它会产生这样的错误

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
src/ndnSIM/bindings/ns3module.cc:PyObject*\u wrap\u pyns3nddata\u SetName\u 0(pyns3nddata*,PyObject*,PyObject*,PyObject**)函数中:
src/ndnSIM/bindings/ns3module.cc:8418:62:错误:调用“ns3::ndn::Data::SetName(ns3::Ptr)”时没有匹配的函数
src/ndnSIM/bindings/ns3module.cc:8418:62:注:候选项包括:
./ns3/ndn data.h:60:3:注意:void ns3::ndn::data::SetName(unsigned int,ns3::Ptr)
/ns3/ndn data.h:60:3:注意:候选者需要2个参数,提供1个
这是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;
}
PyObject*
_wrap_pyns3ndData_SetName__0(pyns3ndData*self,PyObject*args,PyObject*kwargs,PyObject**return_异常)
{
PyObject*py_retval;
Pyns3ndName*名称;
ns3::ndn::Name*Name\u ptr;
常量字符*关键字[]={“名称”,空};
if(!PyArg_ParseTupleAndKeywords(args,kwargs,(char*)“O!”,(char**)关键字,&PyNs3NdnName_Type,&name)){
{
PyObject*exc_类型,*回溯;
PyErr_获取(&exc_类型、返回异常和回溯);
Py_XDECREF(exc_型);
Py_XDECREF(回溯);
}
返回NULL;
}
name_ptr=(name?name->obj:NULL);
self->obj->SetName(ns3::Ptr(Name_Ptr));
Py_增量(Py_无);
py_retval=py_None;
返回py_retval;
}
我是python新手,需要基于python中设置数组定义的代码的帮助。感谢

基于,ndnsim用于生成python绑定。根据生成绑定的3种方法,您必须找到ndn使用哪种方法。如果必须编写python脚本,请验证

mod.add_function('SetName', None, ['int', '...'])
有两个参数不是1(根据 ).但我猜您或ndnsim在头文件上运行(py)gccxml。如果是这样的话,那么问题很可能是pybindgen中的一个bug,因为t直接读取您的头文件,这并不是您做错了什么

您应该验证您的.h和cpp是否在ndnsim之外正确编译和构建(注释掉所有ndnspecific代码),并在main.cpp中运行,以确保这确实是pybindgen的问题


考虑张贴到

为什么有两个版本的
SetName()
,一个通过复制获取参数,另一个通过常量引用获取参数?为什么这两者的定义不同呢?一个版本就足够了(这样你就不会出错了)
self->obj->SetName
有两个参数,所以应该是正确的,你确定这就是错误所指的源代码吗?错误是
src/ndnSIM/bindings/ns3module.cc:8418:62
:is
self->obj->SetName
ns3module.cc的第8418行?@scholli已编辑。我的错,谢谢
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
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;
}
mod.add_function('SetName', None, ['int', '...'])