为什么我的 QtLua 源代码中没有实现 QObjectIterator::get_value_ref() 方法?

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

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

另外,似乎还有另一个功能没有实现。或者至少没有实现为可在MSVC2010中构建,我实际上不知道gcc是否可以接受它们需要但未返回值的函数,但我极其怀疑。 qtluaenumiterator.cc的第58行

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

信息:

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

我通过谷歌搜索几乎找不到任何关于这个主题的信息(其中1个是俄语的,所以我不知道它是否有帮助)

原文链接 https://stackoverflow.com/questions/8366141

点赞
stackoverflow用户580918
stackoverflow用户580918

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

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

我猜测 GCC 知道忽略函数没有返回值的问题,因为使用了 abort() 函数。

2011-12-04 14:28:23
stackoverflow用户1772457
stackoverflow用户1772457

这些虚拟函数是从基类重新实现的,当对象是 QObjectIterator 或 EnumIterator 时,它们从未被调用。没有办法从这样的迭代器中构建 ValueRef,因为 Qt 的元数据是不可修改的。对这些函数的调用将表示一个 bug,因此在这里调用 std::abort 是公平的。

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

2012-10-24 20:48:13