Russian Qt Forum
Ноябрь 18, 2024, 15:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программирование под Symbian  (Прочитано 6512 раз)
tall32
Гость
« : Июль 28, 2013, 18:09 »

Ситуация такая.  

Честно признаюсь программы для Symbian еще не писал, но есть телефон с Symbian и вот захотелось))...

Максимум какие проги я писал под Symbian это было вводное "Hello Word"..

И так...
Платформа : Symbian^3
IDE: Qt (4.6.3)

В программе используется парсер математических
выражений http://muparser.beltoforion.de/

Пишу программу в Qt Creator она успешно собирается и запускается в эмуляторе. В эмуляторе все прекрасно работает.

Но когда переключаешь на сборку под Symbian (sis)

вылезают ошибки:
Код:
call of overloaded 'pow(int&, int&)' is ambiguous'
candidates are: double pow(double, double)
      float pow(javascript:swapOptions();float, float)
      long double pow(long double, long double)
      float pow(float, int)
      double pow(double, int)
      long double pow(long double, int)

no matching function for call to 'mu::Parser::DefineVar(const char [2], double*)'
      candidates are: void mu::ParserBase::DefineVar(const mu::string_type&, mu::value_type*)
no matching function for call to 'mu::Parser::SetExpr(std::string)'
      candidates are: void mu::ParserBase::SetExpr(const mu::string_type&)

Вот участок кода:
Код:
............................
double x;
QString func;
............................
try{
    mu::Parser parser;
    parser.DefineVar("x",&x);
    parser.SetExpr(func.toStdString());
............................

и еще как видно по ошибкам в тех местах где используется функция pow()


Я просто даже не могу понять в чем проблема, так как ошибки то вроде понятные, но почему в эмуляторе он их компилит, а в sis нет.

Хотя бы ткнините мне в какую сторону копать))).....

В заранее спасибо).
« Последнее редактирование: Июль 28, 2013, 18:16 от tall32 » Записан
Figaro
Гость
« Ответ #1 : Июль 28, 2013, 18:38 »

Все в ошибке описано (неоднозначно):
при вызове pow не знает (точнее компилятор или там динамический загрузчик, под Symbian не писал, но в Виндозе такое бывает), что вызывать - я решал методом указывания явного указания/преобразования типов аргументов,  как то так:

Код:
pow((double) 1.1, (double) 0.5);

ну или:
Код:
pow((int) 1, (int) 1);

P.S. Код лень смотреть...
« Последнее редактирование: Июль 28, 2013, 18:42 от Figaro » Записан
tall32
Гость
« Ответ #2 : Июль 28, 2013, 19:21 »

Спасибо)...

Явные указатели помогли с pow()

Но вот с классом parser не получается
Записан
Figaro
Гость
« Ответ #3 : Июль 28, 2013, 19:30 »

Может и поможет... времени нет вникать:
http://stackoverflow.com/questions/4167397/qt-no-matching-function-for-call

P.S. Хотя похоже та же порнография - при вызове функций явно указывайте типы аргументов.. там предлагаются судя по ошибкам кандидаты из доступных функций Улыбающийся
« Последнее редактирование: Июль 28, 2013, 19:36 от Figaro » Записан
tall32
Гость
« Ответ #4 : Июль 28, 2013, 19:37 »

да пытаюсь с явными сделать....уже чего только ему не указываю)))
Записан
Figaro
Гость
« Ответ #5 : Июль 28, 2013, 20:16 »

ну дык при вызове DefineVar:

Код:
DefineVar((const char [2]) хня1, (double*) хня2)

явные преобразования/указания типов... опосля сообщения об ошибках в студию...
« Последнее редактирование: Июль 28, 2013, 20:18 от Figaro » Записан
tall32
Гость
« Ответ #6 : Июль 28, 2013, 20:31 »

Код:
Код:
  
    parser.DefineVar((string) "x",(double*) &x);
    parser.SetExpr((string) func.toStdString());

Ошибки:
Код:
 
no matching function for call to 'mu::Parser::DefineVar(std::string, double*)'
   candidates are: void mu::ParserBase::DefineVar(const mu::string_type&, mu::value_type*)
no matching function for call to 'mu::Parser::SetExpr(std::string)'
   candidates are: void mu::ParserBase::SetExpr(const mu::string_type&)
Записан
Lagovas
Гость
« Ответ #7 : Июль 28, 2013, 21:11 »

Дык делайте преобразования не к std::string, а к mu::string и так далее.
Записан
tall32
Гость
« Ответ #8 : Июль 28, 2013, 21:39 »

да уже и так пробовал))...там еще больше ошибок...

буду еще пробывать)))...
Записан
tall32
Гость
« Ответ #9 : Июль 28, 2013, 21:45 »

Вот такие кренделя))

Код:
Код:
parser.DefineVar((mu::string_type)"x",(double)* &x);

Ошибки:
Код:
error: no matching function for call to 'std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(const char [2])'
candidates are:
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _CharT*, const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__move_source<std::basic_string<_CharT, _Traits, _Alloc> >) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc =        std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(typename stlp_priv::_String_base<_CharT, _Alloc>::size_type, _CharT, const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, typename stlp_priv::_String_base<_CharT, _Alloc>::size_type, const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&, typename stlp_priv::_String_base<_CharT, _Alloc>::size_type, typename stlp_priv::_String_base<_CharT, _Alloc>::size_type, const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::_String_reserve_t, unsigned int, const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]
       std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const typename stlp_priv::_String_base<_CharT, _Alloc>::allocator_type&) [with _CharT = wchar_t, _Traits = std::char_traits<wchar_t>, _Alloc = std::allocator<wchar_t>]

   
Записан
Figaro
Гость
« Ответ #10 : Июль 29, 2013, 01:35 »

Чет не то с подключением стандартной либы... Потрахайтесь с ключами компилятора относящимися к трактовке char
Записан
tall32
Гость
« Ответ #11 : Июль 29, 2013, 14:25 »

спасибо...попробую...
Записан
tall32
Гость
« Ответ #12 : Август 01, 2013, 23:57 »

все разобрался вот конечный вариант все работает под Symbian 9.4

Код:
.............
    QString func;
    QString st_x
    double x;
.............
    //QString to wstring
    std::wstring wstringMu=st_x.toStdWString();;
    //wstrign to wchar_t
    const wchar_t * temp= wstringMu.c_str();

    parser.DefineVar(temp,(double*) &x);

    wstringMu=func.toStdWString();
    temp= wstringMu.c_str();

    parser.SetExpr(temp);
   
............



Всем спасибо)

Тему можно считать закрытой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.135 секунд. Запросов: 21.