una transformar postfijo postfija para notacion matematicas infijo infija expresiones expresion evaluar evaluador evalua como calculadora aritmeticas algoritmo c++ qt exprtk

c++ - transformar - Evaluar una expresión matemática en Qt



notacion postfija (2)

Usando solo Qt puro puedes hacer algo como esto:

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

puedes hacer mucho más, ver AQUÍ y AQUÍ

Intento crear una aplicación Qt y necesito un evaluador de expresiones matemáticas para evaluar cosas como esta, p. Ej. (4 + 5) * 2-9 / 3. Incluí el archivo .hpp de esta biblioteca ( http://www.partow.net/programming/exprtk/ ) en mi proyecto en Qt Creator e intenté ejecutar el siguiente ejemplo de código:

#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; }

Cuando intento compilarlo y ejecutarlo obtengo el siguiente resultado:

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

¿Cual podría ser el problema?


En realidad, en mi máquina (Qt 5.5, Ubuntu 16.04 con g ++ 5.3), el código anterior no funciona.

A pesar de que la respuesta es bastante antigua, puse mi solución en caso de que alguien la encuentre útil.

QScriptEngine utiliza la sintaxis de JavaScript. Para que el código anterior funcionara, tuve que cambiar la sintaxis a:

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