2012-02-23 58 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