-1

我的“策略”类有两个不同版本的构造函数。使用其中一个构造函数时,我似乎无法通过引用传递 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);,那么编译器不会抱怨。请帮忙!:)

4

3 回答 3

5
Policy policy(); // Does not work

这是最令人头疼的 parse。尝试

Policy policy;

基本上,编译器将您的变体视为一个函数的声明,该函数不接受任何内容并返回策略。它类似于

int rand();
于 2012-04-17T20:53:03.610 回答
3

摆脱变量声明()之后。policy编译器认为这是一个函数声明。

于 2012-04-17T20:53:29.693 回答
1

正如您从错误输出中看到的那样,Policy policy()创建了一个函数,然后您尝试将其发送到sampleMIXD. 用代替构造它Policy policy;(即省略())。

于 2012-04-17T20:54:24.513 回答