C ++ и python: разрешение TypeError для векторных аргументов? - PullRequest
1 голос
/ 23 февраля 2012

В настоящее время я работаю над частью кода на Python, интегрированной с c ++ на платформе с открытым исходным кодом.Классы и определения 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 is:

0011010110111011001001010100011101001111001100010000010000111111

Но сообщение об ошибке, которое я получаю, выглядит следующим образом:

Ошибка типа: в методе 'packet_sink', аргумент 1 типа 'std :: vector> const & '.

Может кто-нибудь помочь мне понять ошибку, если не решение проблемы.

1 Ответ

0 голосов
/ 24 февраля 2012

Мне кажется, что self._access_code должен быть списком или кортежем целых чисел, которые либо 0, либо 1.

Gnuradio использует SWIG для создания интерфейса Python из кода C ++.SWIG отобразит вектор C ++ в список питонов.Поэтому, если вы передадите список целых чисел (0 или 1), его с радостью следует преобразовать в вектор.

Я предполагаю, что ваш self._access_code является строкой, и вам необходимо применить к ней функцию string_to_1_0_list.

...