【问题标题】:Why is QObjectIterator::get_value_ref() not implemented in my source distribution of QtLua?为什么 QObjectIterator::get_value_ref() 没有在我的 QtLua 源代码分发中实现?
【发布时间】:2012-01-12 01:28:47
【问题描述】:

我正在尝试在我的 Windows 机器上为 Qt 4.7.4 构建 QtLua 模块,并且我已经使用适当的包含/lib 路径和编译器/链接器设置来设置项目(感谢 cmake)。但是现在我遇到了一个问题,因为位于 qtluaobjectiterator.cc 的第 145 行的 ValueRef QObjectIterator::get_value_ref() 的实现似乎缺失,所以库无法构建。我真的不知道该怎么做,我尝试返回一个默认值,但 ValueRef 没有默认构造函数。这就是函数源文件中的全部内容:

ValueRef QObjectIterator::get_value_ref()
{
    // Not used from lua script
    std::abort();
}

似乎另一个功能也没有实现。或者至少没有实现在 MSVC2010 中可构建,我实际上不知道 gcc 是否可以处理不返回它们应该返回的值的函数,但我非常怀疑它。 qtluanumiterator.cc 第 58 行

ValueRef EnumIterator::get_value_ref()
{
    abort();
}

信息:

  • Windows 7 x64 Ultimate
  • Visual Studio 2010 终极版(带 MSVC10)
  • luaforwindows v5.1.4-45
  • QtLua v1.3
  • QtSDK 4.7.4
  • CMake 2.8.6

我通过谷歌搜索找到了几乎 0 个关于这个主题的项目(1 个是俄语的,所以我不知道它是否有帮助)

【问题讨论】:

  • 发那个俄语话题,如果有用的话我可以翻译一下。
  • 不幸的是,我似乎“放错地方”了,现在找不到链接:(
  • forum.sources.ru/… 找到了,而且,这似乎只是一个问题
  • 不,该线程中的人遇到的问题似乎与此问题无关。那就不知道了。
  • 好的,谢谢

标签: c++ qt visual-c++ lua cmake


【解决方案1】:

当对象是 QObjectIterator 或 EnumIterator 时,从不调用从基类重新实现的这些虚函数。由于 Qt 元数据不可修改,因此无法从此类迭代器构建 ValueRef。调用其中一个函数将表明存在错误,因此在这里调用 std::abort 是公平的。

此外,gcc 知道 std::abort 函数永远不会返回,因此它不需要这些函数在调用 abort 后返回值。

【讨论】:

    【解决方案2】:

    看起来它还没有实现,但是有一个 VC++ 的解决方法:

    return ValueRef(Value(_ls), Value(_ls));
    

    我猜 GCC 知道忽略函数不返回值是因为 abort() 函数

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 2015-11-01
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多