繁体   English   中英

错误:初始化时无法将'Vector(*)(double,Vector)'转换为'ForwardEulerSolver *'

[英]error: cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization

真的在这个问题上挣扎。

我正在编写一段代码,以使用正向Euler方法解决线性ODE的一般系统。

我相信我的代码在类中运行良好,但是在初始化时遇到问题。

这是我的ForwardEulerSolver类的构造函数:

ForwardEulerSolver(ODEInterface& anODESystem, const Vector& initialState, 
const double initialTime, const double finalTime, const double stepSize, 
Vector (*pFunction)(double time, Vector u), const std::string outputFileName 
= "output.dat", const int saveGap = 1, const int printGap = 1);

我相信问题出在Vector(* pFunction)(double time,Vector u)。 所讨论的函数应该是一个花费时间“ t”和向量u并返回向量u ^ {dot}(即du / dx)的函数。

然后在驱动程序中定义:

Vector FunctionToSolve(double time, Vector U)
{
    Vector Output(1);
    Output[0] = 1/(1 + pow(time,2));

    return Output;
}

作为一个单独的函数(我知道向量U在这里未使用,问题是1D,但我希望该选项可以使用1个以上的维并使用更复杂的f来执行此操作)。 然后我有:

Vector  (*pfunction)(double, Vector);
pfunction = &FunctionToSolve;

在int main()中。

然后,我尝试通过以下方式初始化ForwardEulerClass:

ForwardEulerSolver* EulerSystem(*pODESystem, *initialVector, 0, 10, 0.01, *pfunction);

并在该行上得到以下错误:

error: cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization

我还收到大量警告说(全部在同一行):

warning: right operand of comma operator has no effect [-Wunused-value]

warning: value computed is not used [-Wunused-value]

error: expression list treated as compound expression in initializer [-fpermissive]

任何帮助将不胜感激! 谢谢!

首先,您尝试初始化ForwardEulerSolver的实例并将其分配给指针类型的变量。 这在语法上是不正确的。 您可能想做这样的事情:

ForwardEulerSolver eulerSystem(*pODESystem, *initialVector, 0, 10, 0.01, pfunction);

也许这样:

ForwardEulerSolver* eulerSystem = new ForwardEulerSolver(*pODESystem, *initialVector, 0, 10, 0.01, pfunction);

我更改了EulerSystem的字母大小写,只是想确保您使用的是变量名,而不是某些派生的类名。

还要注意,您不想取消引用函数指针。 您实际上想要传递指针,而不是当场评估功能。 所以我删除了*之前pfunction

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM