Проблема с числом / типом аргументов, передаваемых перегруженному конструктору c ++, заключенному в swig - PullRequest
2 голосов
/ 27 апреля 2010

Я пытаюсь обернуть класс c ++ (назовем его «Спам»), написанный кем-то другим с помощью swig, чтобы открыть его для Python. После решения нескольких проблем я могу импортировать модуль в python, но когда я пытаюсь создать объект такого класса, я получаю следующую ошибку:

 foo = Spam.Spam('abc',3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "Spam.py", line 96, in __init__
    this = _Spam.new_Spam(*args)
NotImplementedError: Wrong number of arguments for overloaded function 'new_Spam'.
  Possible C/C++ prototypes are:
    Spam(unsigned char *,unsigned long,bool,unsigned int,SSTree::io_action,char const *)
    Spam(unsigned char *,unsigned long,bool,unsigned int,SSTree::io_action)
    Spam(unsigned char *,unsigned long,bool,unsigned int)
    Spam(unsigned char *,unsigned long,bool)
    Spam(unsigned char *,unsigned long)

Погуглив, я понял, что ошибка, вероятно, вызвана типом аргументов, а не числом (что весьма запутанно), но я все еще не могу определить. Я подозреваю, что проблема заключается в передаче строки в качестве первого аргумента, но я не знаю, как ее исправить (имейте в виду, что я почти не знаю c / c ++).

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

Попробуйте с:

%typemap(in) (unsigned char *) = (char *);
2 голосов
/ 06 мая 2010

SWIG обрабатывает строки как 'char *'.Использование вами «unsigned char *», скорее всего, сбивает с толку.Вы можете изменить сигнатуру на 'char *' или предоставить карту типа:

%typemap(in) unsigned char * = char*
0 голосов
/ 23 октября 2015

Эту проблему можно решить, изменив строки от 100 до 110

self.source = uhd_receiver(options.args, symbol_rate,
                                   options.samples_per_symbol,
                                   options.rx_freq, options.rx_gain,
                                   options.spec, options.antenna,
                                   options.verbose)

        self.sink = uhd_transmitter(options.args, symbol_rate,
                                    options.samples_per_symbol,
                                    options.tx_freq, options.tx_gain,
                                    options.spec, options.antenna,
                                    options.verbose)

до следующего

self.source = uhd_receiver(options.args, symbol_rate,
                                       options.samples_per_symbol, options.rx_freq, 
                                       options.lo_offset, options.rx_gain,
                                       options.spec, options.antenna,
                                       options.clock_source, options.verbose)

        self.sink = uhd_transmitter(options.args, symbol_rate,
                                        options.samples_per_symbol, options.tx_freq,
                                        options.lo_offset, options.tx_gain,
                                        options.spec, options.antenna,
                                        options.clock_source, options.verbose)

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...