Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt инструментарий _ Баг в lupdate в 4.6.X

Автор: inviZ 23.6.2010, 14:26

Короче говоря, сегодня мною был обнаружен баг. Если класс не принадлежит глобальному пространству имен, lupdate отказывается правильно определять контекст.
Т.е., на такой код:

namespace MyNamespace {

QString MyClass::someFunc() const
{
    return tr("Test");
}

}


Он ругается подобным образом:
C:/Projects/Temporary/TempProject9/main.cpp:13: Qualifying with unknown namespace/class ::MyClass

В результате в TS-файле получаем следующее:
<context>
    <name>MyClass</name>
    <message>
        <location filename="main.cpp" line="13"/>
        <source>Test</source>
        <translation type="unfinished"></translation>
    </message>
</context>


Хотя должно быть, конечно же "<name>MyNamespace::MyClass</name>". Естественно, такой файл перевода оказывается "нерабочим". Пока решил эту проблему так - использую lupdate из 4.5. Хотя, конечно, можно решить проблему, полностью специфицируя контекст, т.е.:

namespace MyNamespace {

QString MyClass::someFunc() const
{
    return MyNamespace::MyClass::tr("Test");
}

}

Но я думаю, понятно, что не самый удобный вариант.
В общем, стоит ли отправить багрепорт?

Автор: molchanoviv 23.6.2010, 14:28

Думаю да.

Автор: Алексей1153 23.6.2010, 14:38

Всё ничуть не баг, а только синтаксис C++

Студия, кстати, так же реагирует. А вот если объявление класса поместить в это же пространство имён, то всё хорошо

namespace MyNamespace
{
    class MyClass
    {
        int someFunc() const;
    };
}

namespace MyNamespace
{

    int MyClass::someFunc() const
    {
        return 0;
    }
}


а вот это
Цитата
namespace MyNamespace
{

QString MyClass::someFunc() const
{
    return MyNamespace::MyClass::tr("Test");
}

}


И есть как раз глюк. Даже вот так с ходу не могу понять, что тут подумал компилятор ))

Автор: inviZ 23.6.2010, 15:47

Алексей1153, наверное, вы невнимательно прочитали тему. Естественно, в хидере объявление класса находится в этом же пространстве имен. В данном случае речь идет не об ошибке компиляции (отсутствуют они здесь), а об ошибке утилиты lupdate из инструментария Qt.

Автор: Алексей1153 23.6.2010, 17:36

Ясно :b_flag:

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)