-1

我有一个第三方库,我想使用提供的构造函数之一。

例如:

/** 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)

注意:我尝试在diff()中使用e表达式

4

2 回答 2

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.
于 2017-03-27T16:02:26.863 回答
0

第二个参数应该是出现在字符串中的符号列表(更准确地说,是处理 GiNaC::lst 的 GiNaC::ex)。这有效:

    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
于 2019-03-09T19:40:43.683 回答