C ++参考变量

时间:2014-04-14 18:14:13

标签: c++

如何使用'参考变量'在C ++类中?

我想将以下代码放入一个类中:(注意KinectCV&)

KinectCV& kinect = freenect.createDevice(0);
kinect.some_init_functions();
while(condition) {
    // getting frames from kinect and processing
    kinect.some_processing_functions();
}
kinect.some_stopping_functions();

我试图创建一个类并分离init,处理和停止函数:

class MyKinect {
    public:
    KinectCV kinect;
    void init(){
        /* I cannot use the '& kinect = freenect.createDevice(0);' syntax, help me in this */
    }
    void process(){
        kinect.some_processing_functions();
    }
    void stop(){
        kinect.some_stopping_functions();
    }
}

1 个答案:

答案 0 :(得分:2)

  

我无法使用'& kinect = freenect.createDevice(0)

这是对的,你不能分配引用;一旦初始化,它们永远引用同一个对象。什么看起来像你的代码中的作业

KinectCV& kinect = freenect.createDevice(0);

不是作业,而是初始化。它可以使用初始化语法而不是赋值语法重写,如下所示:

KinectCV& kinect(freenect.createDevice(0));

背后的原因是在C ++中,所有初始化必须在构造函数中发生,而不是在“指定的初始化函数”中。 C ++不知道init是你的初始化函数;所有它知道的是,一旦构造函数结束,对象必须处于一致状态,包含在它可能包含的所有引用中。

将初始化代码移动到MyKinect的构造函数中将解决问题:

class MyKinect {
    public:
    KinectCV kinect;
    MyKinect() : kinect(freenect.createDevice(0)) {
    }
}