我使用boost库中的odeint,作为C ++的初学者,我不了解当前的问题。在名为ODESystem.hpp
的文件中给出以下源代码#include "blaze/Math.h"
class ODESystem {
public:
using Complex = std::complex< Float >;
using StateVector = blaze::DynamicVector< Complex,
blaze::columnVector >;
void operator()(const StateVector &x, StateVector &dxdt, const double t);
};
void ODESystem::operator()(const ODESystem::StateVector &x, ODESystem::StateVector &dxdt, const double t) {
// don't do anything here.
}
以及main.cpp中的简单调用,通过
#include <boost/numeric/odeint.hpp>
int main(int argc, char** argv) {
ODESystem::StateVector h( 3UL, 7.0F );
// ODESystem sys is properly initialized beforehand
boost::numeric::odeint::integrate(sys, h,0.,10.,.1);
}
我看不到编译器为什么告诉我
/usr/local/include/boost/numeric/odeint/integrate/integrate.hpp(53):注意:该候选被拒绝,因为无法推导出至少一个模板参数 集成(系统系统,状态&start_state,时间start_time,时间end_time,时间dt,观察者观察者)
根据我在类似文章中所读的内容,它必须与不可推论的上下文相关联,但我根本不知道该如何将其应用于此处。
答案 0 :(得分:0)
在进行某些更改后,可以正常编译
#include <complex>
#include <vector>
#include <boost/numeric/odeint.hpp>
class ODESystem {
public:
using Complex = float ;
using StateVector = std::vector<Complex>;
void operator()(const StateVector &x, StateVector &dxdt, const double t)
{}
};
bool operator>(const std::complex< float > & f, const std::complex< float > & d)
{
return false;
}
int main(int argc, char *argv[])
{
ODESystem sys;
ODESystem::StateVector h(3UL, 7.0F);
// ODESystem sys is properly initialized beforehand
boost::numeric::odeint::integrate(sys, h, 0., 10., .1);
}
仅更改为
using Complex = std::complex<float> ;
您会遇到麻烦,因为您将不得不针对复杂和战俘而优化操作符>。
至于您的编译错误,您是否忘记了任何标题?