c++ - 错误 : cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization

标签 c++ class vector abstract-class ode

确实在为这个问题而苦苦挣扎。

我正在编写一段代码,使用前向欧拉方法求解线性 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”和 vector u 并返回 vector u^{dot}(即:du/dx)的函数。

然后在我的驱动程序中定义:

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

    return Output;
}

作为一个单独的函数(我知道这里没有使用 vector 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 之前的 *

关于c++ - 错误 : cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48100005/

相关文章:

c++ - ostream插入运算符与其非成员重载的关系

java - 如何在java中将 vector 转换为字符串?

android - 如何在 openSSL 中将 DER 编码字符串的 vector 转换为 x509

java - Class.forName() 在另一个项目中搜索类

头文件中的 C++ 静态变量出现 LNK 错误 2001

c++ - 静态伪随机场发生器

c++ - 优先级队列,为什么它仍然打印最后一个元素

c++ - 将字符串分配给 char 数组的列

javascript - 如何在 Angular 2 应用程序中从 TypeScript/JavaScript 中的字符串获取类?

用于调用 SOAP - Web 服务的 Java 类