Почему QObjectIterator :: get_value_ref () не реализован в моем исходном выпуске QtLua? - PullRequest
1 голос
/ 03 декабря 2011

Я пытаюсь собрать модуль QtLua для Qt 4.7.4 на моей машине с Windows, и у меня все проект настроен (благодаря cmake) с соответствующими путями include / lib и настройками компилятора / компоновщика. Но теперь у меня есть проблема, когда библиотека не будет собираться из-за отсутствующей реализации ValueRef QObjectIterator :: get_value_ref (), расположенной в строке 145 файла qtluaobjectiterator.cc. Я действительно не знаю, что с этим делать, я пытался вернуть значение по умолчанию, но не было конструктора по умолчанию для ValueRef. Это было все, что было в исходном файле для функции:

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

Также представляется, что другая функция также не реализована. Или, по крайней мере, не реализована для сборки в MSVC2010, я не знаю, в порядке ли gcc с функциями, не возвращающими значения, которые они должны, но я сильно сомневаюсь в этом. qtluaenumiterator.cc line 58

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

Информация:

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

Я нашел практически 0 элементов по этой теме с помощью поиска Google (1 был на русском языке, поэтому я не знаю, мог ли он помочь)

Ответы [ 2 ]

2 голосов
/ 25 октября 2012

Эти виртуальные функции, переопределенные из базового класса, никогда не вызываются, когда объект является QObjectIterator или EnumIterator.Невозможно построить ValueRef из такого итератора, поскольку метаданные Qt не могут быть изменены.Вызов одной из этих функций может указывать на ошибку, поэтому справедливо вызывать здесь std :: abort.

Более того, gcc знает, что функция std :: abort никогда не возвращается, поэтому не требует, чтобы эти функции возвращализначение после вызова прервать.

0 голосов
/ 04 декабря 2011

Похоже, что это просто еще не реализовано, но есть обходной путь для VC ++:

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

Я думаю, что GCC знает, что игнорировать, что функции не возвращают значение из-за abort ()функция

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...