如何使用'参考变量'在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();
}
}
答案 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)) {
}
}