C++ странный конструктор сторонних функций

У меня есть сторонняя библиотека, и я хочу использовать один из предоставленных конструкторов.

ex.h:

/** Construct example from string and a list of symbols. The input grammar is
 *  similar to the GiNaC output format. All symbols and indices to be used
 *  in the expression must be specified in a lst in the second argument.
 *  Undefined symbols and other parser errors will throw an exception.        */
ex(const std::string &s, const ex &l);

Я попробовал следующее:

symbol x("x");

ex e("x^2",x);

К сожалению, использование этого конструктора неверно. Я получаю следующее сообщение об ошибке:

libC++ abi.dylib: завершается с необработанным исключением типа std:: invalid_argument: find_or_insert_symbol: символ "x" не найден

Вся предоставленная документация является комментарием над декларацией. Я новичок в C++, поэтому понятия не имею, что не так.

Я попробовал предложение в первом ответе как следующее:

symbol x("x");

ex expression;
ex e("x^2",expression);

std::cout << diff(e,x) << std::end

Это приводит к следующему сообщению об ошибке:

libC++ abi.dylib: завершается с необработанным исключением типа std:: invalid_argument: find_or_insert_symbol: символ "x" не найден (lldb)

Примечание: я попытался использовать e и выражение в diff ().

1 ответ

Решение

Вы должны предоставить ex ссылка, а не symbol ссылка; Попробуй это:

ex MyEx1; //This will call to the ex default constructor for MyEx1, if it exist.
ex e("x^2",MyEx1); //This will call to the ex constructor that you want to use for e.

Второй аргумент должен представлять собой список символов, встречающихся в строке (точнее, GiNaC::ex, обрабатывающий GiNaC::lst). Это работает:

    symbol x("x");
    ex e("x^2", lst{x});

Идея состоит в том, что он должен работать с более чем одним символом:

    symbol x("x"), y("y");
    ex e("x^2-2*x*y+y^2", lst{x,y});
    cout << diff(e, x) << endl;  // prints "2*x-2*y" or similar
Другие вопросы по тегам