1

私は現在、オープン ソース プラットフォームで c++ と統合された Python コードの一部に取り組んでいます。Python のクラスと定義は引数を c++ ファイルに渡し、それによって関数が実行されます。私の c++ ファイルは、以下に示す 3 つの入力引数を取る packet_sink ファイルです。

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' で、型 'std::vector< unsigned char,std::allocator< unsigned char > > const &' の引数 1 です。

問題の解決策ではない場合、誰でもエラーを理解するのを手伝ってくれませんか。

4

1 に答える 1

0

self._access_code は、0 または 1 の整数のリストまたはタプルである必要があります。

Gnuradio は SWIG を使用して、C++ コードから Python インターフェイスを作成します。SWIG は C++ ベクトルを Python リストにマップします。したがって、整数 (0 または 1) のリストを渡す場合、これは喜んでベクトルに変換されます。

私の推測では、あなたの self._access_code は文字列であり、関数 string_to_1_0_list をそれに適用する必要があります。

于 2012-02-23T20:25:24.963 に答える