crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Баг в lupdate в 4.6.X
inviZ
  опции профиля:
сообщение 23.6.2010, 14:26
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.6.2010
Пользователь №: 1781

Спасибо сказали: 4 раз(а)




Репутация:   1  


Короче говоря, сегодня мною был обнаружен баг. Если класс не принадлежит глобальному пространству имен, 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
Сообщение #2


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Думаю да.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 23.6.2010, 14:38
Сообщение #3


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Всё ничуть не баг, а только синтаксис 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");
}

}


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


Сообщение отредактировал Алексей1153 - 23.6.2010, 14:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
inviZ
  опции профиля:
сообщение 23.6.2010, 15:47
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.6.2010
Пользователь №: 1781

Спасибо сказали: 4 раз(а)




Репутация:   1  


Алексей1153, наверное, вы невнимательно прочитали тему. Естественно, в хидере объявление класса находится в этом же пространстве имен. В данном случае речь идет не об ошибке компиляции (отсутствуют они здесь), а об ошибке утилиты lupdate из инструментария Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 23.6.2010, 17:36
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Ясно :b_flag:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 9:40