gpt4 book ai didi

c++ - 类对象的模板

转载 作者:行者123 更新时间:2023-11-30 01:38:34 25 4
gpt4 key购买 nike

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

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 之前。

请注意,数据成员总是按照声明的顺序进行初始化。

Then, non-static data members are initialized in order of declaration in the class definition.

你应该让它们相同以避免这种混淆。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com