【问题标题】:A couple more SWIG warnings更多 SWIG 警告
【发布时间】:2013-12-16 04:53:51
【问题描述】:

我正在尝试围绕 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。

【问题讨论】:

  • 添加您尝试过的内容。你的问题没有表现出任何努力。
  • 请注意我还可以添加什么。我在包含包含上述代码的标头的接口文件上运行 swig,我收到了这些警告。我真的不明白如何解决。这是我提出并得到回答的相关问题的链接,我会在那里继续这个问题,但我觉得这是一个单独的问题。 stackoverflow.com/questions/20602734/…
  • 好吧,没有任何迹象表明您查看过 SWIG 文档或进行过网络搜索或在 SO 上搜索过类似您的问题。
  • 是的,我确实花了很多时间阅读 swig 文档和搜索,我想我只是很兴奋开始在 ruby​​ 中玩这个,并且没有在我的问题中提供足够的细节.起初我以为这整个努力都在我的脑海中,但最后它很容易。 SWIG 很酷,我一定会再次使用它!
  • 我鼓励您编辑您的问题,以说明您所查看的与该问题相关的内容,并说明为什么我的回答没有回答您的问题,也许我可以编辑它。

标签: c++ ruby swig


【解决方案1】:

这只是一个警告,说您将无法在 ruby​​ 中实例化 WEditType 或 WParmlistType。您能够实例化派生类 WEdit 和 WParmList,但不能实例化基类。仅当您想从 WEditType 或 WParmlistType in ruby​​ 派生新类时,这才重要。如果没有,您可以忽略警告。随时查看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,它提供了类似的解释。

【讨论】:

  • 我认为我不需要实例化 WEditType 或 WParmlistType。通过头文件查看,上面显示的是这些类型的唯一用法。
【解决方案2】:

当您在 SWIG 中使用模板时,您可以让 SWIG 知道您使用了哪些模板,以便它可以为其生成包装器代码。对于vector&lt;WString&gt;,可以使用:

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

【讨论】:

  • 这是一个非常有用的评论,我后来发现有几个案例是我没有得到正确的返回值,并且为每个类似的事件添加这个解决了我的问题
猜你喜欢
  • 1970-01-01
  • 2019-09-02
  • 2012-05-27
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多