我编写了一个类,如下所示:

template <typename Function, class RNG>
class Langevin{
public:
   Langevin(RNG & gen_, Function & force_, vector & qp_)
   : gen(gen_),force(force_),qp(qp_){}

    void ABO(const int T){
        for(int t=0; t<T;++t){
            ABO_step();
        }
    }

private:
void ABO_step(){...}

vector & qp;
RNG & gen;
Function & force;
};

并建立了一个类对象并称为成员函数:
int main(){
...
vector qp_sl;
qp_sl.reserve(T+1);
qp_sl.push_back({0.0,0.1});
auto harmonic_force=[](double q){return -q;};
Langevin<decltype(harmonic_force), std::default_random_engine> sl_scheme(gen,harmonic_force, qp_sl);
sl_scheme.ABO(T);

现在我得到了错误信息:
‘Langevin<main()::<lambda(double, double)>, std::linear_congruential_engine<long unsigned int, 16807ul, 0ul, 2147483647ul> >::force’ will be initialized after [-Wreorder] Function & force;
我太劳累了,这是什么错误?

最佳答案

编译器试图告诉您,数据成员force将在qp之后初始化,即使它出现在member initializer list中的qp之前。

请注意,数据成员始终按其声明顺序进行初始化。



您应该使它们相同,以避免这种混淆。

Langevin(RNG & gen_, Function & force_, vector & qp_)
: qp(qp_), gen(gen_), force(force_) {}

关于c++ - 类对象的模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47414916/

10-12 23:51