2013-12-16 3 views
4

Я пытаюсь использовать swig для создания рубиновых оберток вокруг библиотеки C++. Большая часть работы, кажется, работает, но у меня есть одна проблема, которая, я уверен, связана с вышеупомянутым предупреждением.swig Ничего не известно о базовом классе 'std :: string', игнорируется

Похоже, что один из классов, которые я обертываю, унаследован от std :: string.

Я вижу приведенное выше предупреждающее сообщение, когда запускаю swig.

Когда я вызываю метод объекта рубина, который должен быть возвращающую строку, я вижу это

SWIG :: Type_p_std__string: 0x .....

Я имею в виду, мне нужно некоторое как исправить вышеуказанное предупреждение, чтобы это работало, любые идеи?

+0

Я думаю, вам нужно «% include» std_string.i «перед тем, как ваш класс обрабатывается swig. – nishantjr

+0

Но что будет в этом файле? Я попытался включить и , но это не повлияло – nPn

+0

У вас есть процент? Или #include? Обратите внимание, что в файлах интерфейса SWIG они отличаются. – nishantjr

ответ

4

SWIG жалуется, что он не знает о классе std :: string и поэтому не может сгенерировать для него код.

Библиотека SWIG std_string.i имеет специфический для языка код для сопоставления строки C++ с классом строк целевых языков. Добавление %include "std_string.i"до код, который генерирует ваш класс, должен исправить ошибку.

Обратите внимание, что %include отличается от #include в файле интерфейса swig.

+0

Gah ... Я пробовал следующее: '% include" std_string.i ",'% include std_string.i' и '% include прежде чем что-либо еще в i и все же он генерирует SWIGTYPE_p_string для строк в C#:/ –

+1

... Подождите! Починил это. В файле заголовка у меня была определенная строка, которая разрешилась на какой-то странный typedef, я заменил std :: string, и все было хорошо :) –

5

Всякий раз, когда вы видите SWIG :: Type_p_std__string или аналогичный критический тип в выходе SWIG, это означает, что отсутствует карта-карта. Здесь SWIG должен экспортировать std :: string. Обычно это происходит потому, что он используется в параметре вызова функции или в качестве возвращаемого значения в функции, которую вы экспортируете; в вашем случае это потому, что std :: string - это базовый класс. SWIG включает в себя «библиотеку» типовых типов для обычно используемых STL-классов, таких как строка и вектор, вы просто импортируете их с помощью директивы% include. См. http://www.swig.org/Doc2.0/Library.html для других .i, которые включены в SWIG.

Смежные вопросы