我的“策略”类有两个不同版本的构造函数。使用其中一个构造函数时,我似乎无法通过引用传递 Policy 对象,我不明白为什么不这样做。
重载的构造函数:
Policy::Policy(int testing) {
initAge=160;
initState=1;
reset();
x[0]=4;
x[1]=2;
ub[0]=10;
ub[1]=10;
lb[0]=0;
lb[1]=0;
}
Policy::Policy() {
initAge=160;
initState=1;
reset();
x[FRQ]=4;
x[BEG]=40*4;
x[END]=75*4;
for(int i=0; i<240; i++)
x[2+i]=4.0;
x[GS]=2;
lb[0]=1;
ub[0]=80;
for(int i=1;i<3;i++) {
lb[i]=160;
ub[i]=400;
}
for(int i=3;i<243;i++) {
lb[i]=1;
ub[i]=16;
}
lb[243]=2;
ub[243]=4;
}
这是我给出错误的代码。
void sampleMIXD(Constraints& space, Policy& p);
int main(int argc, char** argv) {
// Policy policy(1); // Works
Policy policy(); // Does not work
Constraints space(2);
sampleMIXD(space, policy);
return 0;
}
错误信息:
'../main.cpp:64: 错误:从'Policy (*)()' 类型的临时变量中对'Policy' 类型的非常量引用的无效初始化 ../MIXD.h:12: 错误: 在传递'void sampleMIXD(Constraints&, Policy&)'的参数 2
如果不是Policy policy();
我用 编译Policy policy(1);
,那么编译器不会抱怨。请帮忙!:)