error: cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization
error: cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization
确实在为这个问题苦苦挣扎。
我正在编写一段代码,使用正向欧拉方法求解线性 ODE 的一般系统。
我相信我的代码在 classes 中工作正常,但我在初始化它时遇到问题。
这是我的 ForwardEulerSolver class 的构造函数:
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,returns向量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
的字母大小写,只是想确保您指的是变量名,而不是派生的 class 名称。
另请注意,您不想取消引用函数指针。您实际上是想传递指针,而不是当场评估函数。所以我在 pfunction
.
之前删除了 *
确实在为这个问题苦苦挣扎。
我正在编写一段代码,使用正向欧拉方法求解线性 ODE 的一般系统。
我相信我的代码在 classes 中工作正常,但我在初始化它时遇到问题。
这是我的 ForwardEulerSolver class 的构造函数:
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,returns向量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
的字母大小写,只是想确保您指的是变量名,而不是派生的 class 名称。
另请注意,您不想取消引用函数指针。您实际上是想传递指针,而不是当场评估函数。所以我在 pfunction
.
*