"ポリシー"クラスのコンストラクタは2種類あります。私は、コンストラクタの1つを使用するときに、参照によってPolicyオブジェクトを渡すことができないと思われます。なぜそうではないのか分かりません。C++「非constリファレンスの無効な初期化」エラー
オーバーロードコンストラクタ:
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: error: invalid initialization of non-const reference of type 'Policy' from a temporary of type 'Policy (*)()' ../MIXD.h:12: error: in passing argument 2 of 'void sampleMIXD(Constraints&, Policy&)'
代わりPolicy policy();
の私はPolicy policy(1);
でコンパイルする場合、コンパイラは文句はありません。助けてください! :)
は、括弧を外します。 –