我编写了一个类,如下所示:
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/