错误:初始化时无法将'Vector (*)(double, Vector)'转换为'ForwardEulerSolver*'
error: cannot convert 'Vector (*)(double, Vector)' to 'ForwardEulerSolver*' in initialization
真的在努力解决这个问题。
我正在编写一段代码,使用前向欧拉方法解决线性 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);
我相信问题出在矢量(*pFunction)(双倍时间,矢量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;
in 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
之前删除了*
.
相关文章:
- vector<vector<double>> to mxArray using memcpy
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 将 mwArray 转换为 std::vector<double>
- 将双指针作为参数传递给需要引用 std::vector <double>的函数
- 从 std::vector<double> 到 Python 列表的转换失败(提升 python)
- 将 std::shared_ptr<<std::vector<double>> 传递给函数
- 在调用中使用 std::vector,<double>但收到有关 std::vector<double、std::分配器>正在使用的错误<double>
- pybind11:如何包装以 std::vector<double> 为参数以避免数据复制的 C++ 函数
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<boost::optional<double>> 转换为 std::vector<double>
- 将 double* 转换为 std::vector<double> (C++)
- opencv::meanStdDev with vector<vector<double>>
- 如何修复此错误:二进制表达式的操作数无效("std::vector<double>"和"double")?
- 使用 Spirit 将 std::vector<std::vector<double> 解析为结构属性
- C++:快速/并行计算两个"std::vector<double>"向量之间的L1距离
- 并行分配给 std::vector<std::vector<double>>
- 错误:初始化时无法将'Vector (*)(double, Vector)'转换为'ForwardEulerSolver*'
- 为什么 Vector<double> 接受整数元素initializer_list?