我写了一个类,看起来如下:
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;
我过度训练,错误是什么?
答案 0 :(得分:4)
编译器试图告诉您,数据成员force
将在qp
之后初始化,即使它出现在member initializer list的qp
之前。
请注意,数据成员始终按其声明的顺序初始化。
然后,按照类定义中的声明顺序初始化非静态数据成员。
你应该让它们相同,以避免这种混淆。
Langevin(RNG & gen_, Function & force_, vector & qp_)
: qp(qp_), gen(gen_), force(force_) {}