使用exprtk.hpp创建绘制函数

时间:2015-07-23 20:00:26

标签: c++ function parsing

所以,我一直在尝试添加一个函数,你传递一个函数的字符串(例如“sin(x)”)和一些边界,并通过制作GL_LINE_STRIP来绘制线条。我根据开发人员制作的示例1编写了该函数。这是我创建的功能。     //摘自draw.h     模板     void GraphY(std :: string ln)     {       typedef exprtk :: symbol_table symbol_table_t;       typedef exprtk :: expression expression_t;       typedef exprtk :: parser parser_t;

  T x;
  symbol_table_t symbol_table;
  symbol_table.add_variable("x", x);
  symbol_table.add_constant();

  expression_t expression;
  expression.register_symbol_table(symbol_table);
  parser_t parser;
  parser.compile(ln, expression);

  glLineWidth(w);
    glColor4f(outline.r / 255, outline.g / 255, outline.b / 255, outline.a / 255);
    glBegin(GL_LINE_LOOP);
  for (x = T(-5); x <= T(+5); x += T(0.001))
  {
    T y = expression.value();
    glVertex3f(x, y, 0);
  }
  glEnd();
}

这个函数似乎没有错误,我相信它一旦调用就可以正常工作。我有一个调用此函数的函数(它在一个不同的文件中)。就是这样。

//Excerpt from render.cpp
GraphY("sin(x)");

它产生以下错误

1>Render.obj : error LNK2019: unresolved external symbol "void __cdecl GraphY(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?GraphY@@YAXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "void __cdecl Render(void)" (?Render@@YAXXZ)

虽然已经问过这个错误但我真的不知道如何修复它,因为我不熟悉模板或exprtk.hpp的交互操作。我希望有人可以帮助我。

我检查过,并不是因为它无法找到该功能。有些事情出错了。我怀疑这是因为模板。虽然我已经读过,但我真的不明白。但是我已经收集了,我应该以这样的方式调用函数:

GraphY<somedatatype>("sin(x)");

但是我不知道要放入什么数据类型以使其满意。你能帮我把这个功能搞定吗?您可以从https://github.com/ArashPartow/exprtk下载库(exprtk.hpp)。你还可以看到你应该如何在代码中使用库(不幸的是,他没有任何示例,他在这里创建了这样的函数)。

非常感谢!

0 个答案:

没有答案