Я пытаюсь создать приложение 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)
В чем может быть проблема?
Используя только чистый Qt
Вы можете сделать что-то вроде этого:
QString expression_string("3 + sqrt(5) + pow(3,2) + log(5)");
QScriptEngine expression;
double my_val=expression.evaluate(expression_string).toNumber();
На самом деле, на моей машине (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();