Подтвердить что ты не робот

Оцените математическое выражение в Qt

Я пытаюсь создать приложение Qt, и мне нужен оценщик математического выражения, чтобы оценить такие вещи, как это, например. (4 + 5) * 2-9/3. Я включил файл .hpp этой библиотеки (http://www.partow.net/programming/exprtk/) в свой проект в Qt Creator и попытался запустить следующий пример кода:

#include <cstdio>
#include <string>
#include "exprtk.hpp"

int main()
{
   typedef exprtk::expression<double> expression_t;
   typedef exprtk::parser<double>         parser_t;

   std::string expression_string = "3 + sqrt(5) + pow(3,2) + log(5)";

   expression_t expression;

   parser_t parser;

   if (parser.compile(expression_string,expression))
   {
     double result = expression.value();

     printf("Result: %19.15\n",result);
   }
   else
     printf("Error in expression\n.");

   return 0;
}

Когда я пытаюсь скомпилировать и запустить его, я получаю следующий вывод:

 debug\main.o:-1: error: too many sections (62303)

В чем может быть проблема?

4b9b3361

Ответ 1

Используя только чистый Qt, вы можете сделать что-то вроде этого:

QString expression_string("3 + sqrt(5) + pow(3,2) + log(5)");
QScriptEngine expression;
double my_val=expression.evaluate(expression_string).toNumber();

вы можете сделать гораздо больше, см. ЗДЕСЬ и ЗДЕСЬ

Ответ 2

Собственно, на моей машине (Qt 5.5, Ubuntu 16.04 с g++ 5.3) код выше не работает.

Несмотря на то, что ответ довольно старый, я поставил свое решение на случай, если кто-то найдет его полезным.

QScriptEngine использует синтаксис JavaScript. Поэтому, чтобы сделать вышеприведенный код, мне пришлось изменить синтаксис на:

QString expression_string("3 + Math.sqrt(5) + Math.pow(3,2) + Math.log(5)");
QScriptEngine expression;
double my_val=expression.evaluate(expression_string).toNumber();