为什么不能推导出模板参数?

时间:2018-08-22 16:07:07

标签: c++ math boost odeint

我使用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,观察者观察者)

根据我在类似文章中所读的内容,它必须与不可推论的上下文相关联,但我根本不知道该如何将其应用于此处。

1 个答案:

答案 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> ;

您会遇到麻烦,因为您将不得不针对复杂和战俘而优化操作符>。

至于您的编译错误,您是否忘记了任何标题?