还有一些SWIG警告

时间:2013-12-16 04:53:51

标签: c++ ruby swig

我正在尝试围绕c ++库创建一些ruby包装器。 我有大部分工作,但我有一些警告,我想解决。

问题在于2个头文件,下面是代码片段

typedef std::set<WParm,std::less<WParm> > WParmlistType;
typedef WParmlistType::iterator  WParmlistIter;

class WParmlist : public WParmlistType {

和我得到的警告...... 警告401:基类'WParmlistType'没有任何已知信息。忽略。

,第二个标题类似:

typedef std::vector<WString> WEditType;
typedef WEditType::iterator  WEditIter;

class WEdit : public WEditType {

发出类似警告:

警告401:基类'WEditType'没有任何已知信息。忽略。

之前我曾见过这种类型的警告,但这与std :: string的继承有关。那些引起了真正的问题,因为我无法获得返回的字符串值。我能够通过使用%include std_string.i来解决这个问题,感谢这里找到的答案:swig Nothing known about base class 'std::string', ignored。我想在这种情况下我可能需要处理typedef的其他指令。

2 个答案:

答案 0 :(得分:1)

这只是一个警告,说您将无法在ruby中实例化WEditType或WParmlistType。 能够实例化派生的类WEdit和WParmList,而不是基类。仅当您要从WEditType派生新类或在ruby 中派生WParmlistType 时,这才重要。如果没有,您可以忽略该警告。请务必查看http://www.swig.org/Doc2.0/处的SWIG文档。例如,我对http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nn20所说的内容有一个很好的解释。此外,总是用谷歌搜索,特别是在SO上查看结果。搜索错误消息显示Avoid 'nothing known about [parent] class...' error in swig,其中提供了类似的解释。

答案 1 :(得分:1)

当您在SWIG中使用模板时,您可以让SWIG知道您使用的模板,以便为其生成包装器代码。如果是vector<WString>,您可以使用:

%include <std_vector.i>
%template() std::vector<WString>;