【问题标题】:C++ and python : TypeError resolution for vector arguments ?.C++ 和 python:向量参数的类型错误解析?
【发布时间】:2012-02-23 03:31:32
【问题描述】:

我目前正在开发一段在开源平台上与 c++ 集成的 python 代码。 Python 类和定义将参数传递给 c++ 文件,函数由此运行。我的 c++ 文件是一个 packet_sink 文件,它采用下面提到的 3 个输入参数:

packet_sink (const std::vector<unsigned char>& sync_vector,
                                msg_queue_sptr target_queue, int threshold)

部分python代码如下:

   self.threshold = -1
   if access_code is None:
       code = tuple(string_to_1_0_list(default_access_code))
       access_code = to_1_0_string(code)
   if not packet_utils.is_1_0_string(access_code):
       raise ValueError, "Invalid access_code %r. Must be string of 1's and 0's" % (access_code,)
   print " _access_code : %s " %(self._access_code,)

   self._msgq = gr.msg_queue()# holds packets fromthe PHY

   self.phy_anay_demod= phy_anay_demod(self,*args, **kwargs)
   self._packet_sink =gr.packet_sink(self._access_code,self._msgq,self.threshold)

_access_code 的值为:

0011010110111011001001010100011101001111001100010000010000111111

但我收到的错误信息如下:

TypeError: 在方法 'packet_sink' 中,参数 1 类型为 'std::vector> const &'。

如果不能解决问题,谁能帮我理解错误。

【问题讨论】:

  • 您是否尝试过阅读平台文档?
  • 感谢您的及时回复。我查看了文档,从我收集的 packet_sink.cc 中它接受的第一个参数的类型来看,它接受的类型是 const std::vector,并且接收到该指针的值是 std::vector> const 或类似的东西。我很想知道为什么会发生这种情况以及我能做些什么来摆脱它。

标签: c++ python gnuradio


【解决方案1】:

在我看来 self._access_code 应该是 0 或 1 整数的列表或元组。

Gnuradio 使用 SWIG 从 C++ 代码创建 python 接口。 SWIG 会将 C++ 向量映射到 python 列表。因此,如果您传入一个整数列表(0 或 1),则应该很高兴将其转换为向量。

我的猜测是您的 self._access_code 是一个字符串,您需要对其应用函数 string_to_1_0_list。

【讨论】:

  • 非常感谢您的帮助。我不敢相信我在我的代码中忽略了这样一个显而易见的事实。非常感谢。
  • 很高兴它成功了。您介意将答案标记为正确吗?
猜你喜欢
  • 2011-06-17
  • 2013-06-24
  • 1970-01-01
  • 2020-07-16
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
相关资源
最近更新 更多