Отсутствует имя функции в таблице символов exprtk после успешного компоновщика функций.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Отсутствует имя функции в таблице символов exprtk после успешного компоновщика функций.

Сообщение Anonymous »

У меня есть следующая функция, которая принимает таблицу символов и добавляет в нее составную функцию:

Код: Выделить всё

void add_function(exprtk::symbol_table& symtab) {

using compositor_t = exprtk::function_compositor;
using function_t   = typename compositor_t::function;

compositor_t compositor(symtab);

const bool res = compositor.add(
function_t("incrementor")
.var("x")
.expression
( " x + 1; " ));

if (!res) {
printf("comp err!");
}
}
Позже я вызываю функцию добавления и затем компилирую выражение, использующее таблицу sym.

Код: Выделить всё

using symbol_table_t = exprtk::symbol_table;
using expression_t   = exprtk::expression;
using parser_t       = exprtk::parser;

double x = 123.0;

symbol_table_t symbol_table;
expression_t   expression;
parser_t       parser;

symbol_table.add_variable("x", x);

add_function(symbol_table);

expression.register_symbol_table(symbol_table);

const std::string program = "incrementor(x)";

if (!parser.compile(program,expression)) {
printf("err: %s\n",parser.error().c_str());
return;
}
Однако parser.compile возвращает false, и я получаю следующую ошибку:

Код: Выделить всё

Error: ERR232 - Undefined symbol: 'incrementor'
Я проверил таблицу символов с помощью отладчика, но функции приращения там нет. Не знаю, почему и как символ инкремента исчезает между вызовом add_function и компиляцией.

Подробнее здесь: https://stackoverflow.com/questions/791 ... compositor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»