2012-02-23 34 views
1

我目前正在开发一个在开源平台上与C++集成的python代码。 Python类和定义将参数传递给C++文件,并由此运行函数。我的C++文件是一个packet_sink文件这需要被下面提到3个输入参数:C++和python:向量参数的TypeError解析?

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: in method 'packet_sink', argument 1 of type 'std::vector< unsigned char,std::allocator< unsigned char > > const &'.

有谁请帮助我理解错误如果不是解决问题的办法。

+0

您是否尝试过阅读平台文档? – 2012-02-23 04:41:29

+0

感谢您的及时回复。我查看了文档,并从我收集的packet_sink.cc中的第一个参数中了解到,它接受的类型是const std :: vector,并且正在接收到该指针的值是std :: vector > const或类似的东西。我很想知道为什么会出现这种情况,以及我能做些什么来摆脱它。 – user1227372 2012-02-23 06:58:36

回答

0

它看起来对我来说self._access_code应该是其是一个整数列表或元组0或1

使用的gnuradio SWIG创建从C++代码Python接口。 SWIG将一个C++向量映射到一个python列表。所以如果你传入一个整数列表(0或1),这应该很好地转换为向量。

我的猜测是,你self._access_code是一个字符串,你需要的功能string_to_1_0_list适用于它。

+0

非常感谢您的帮助。我无法相信我在代码中忽略了这样一个明显的事实。很多谢谢。 – user1227372 2012-02-25 01:05:26

+0

很高兴工作。你介意将答案标记为正确吗? – 2012-02-26 16:03:51