在Qt中评估数学表达式

Gre*_*man 15 c++ qt exprtk

我正在尝试创建一个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;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译并运行它时,我得到以下输出:

 debug\main.o:-1: error: too many sections (62303)
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

bib*_*ibi 6

仅使用pure Qt即可执行以下操作:

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

您可以做的更多,请参阅这里这里

  • 哇...启动一个 JavaScript 引擎只是为了计算一个简单的一行算术表达式。我会使用 boost::spirit。Spirit 的例子中有一个像这样的简单计算器。QScriptEngine 将需要 2 个数量级的时间来简单地添加两个数字。 (3认同)