将引用变量初始化为类成员

Initialise reference variable as a class member

本文关键字:成员 初始化 引用 变量      更新时间:2023-10-16

我正试图将我使用的相机SDK的函数转换为类,因此我可以分别调用函数的不同部分(初始化,捕获图像,清理)。我遇到的一个问题是,函数中的一些变量被定义为:

type& var = type::init();

当我这样做时,这不起作用:

class myClass
{
private:
type& var;
};

I've try to change:

type& var;

:

type* var;

当我把所有东西都放在一个函数中时,这工作得很好,但是当我试图把它分解成一个类中的单独函数时,代码编译但不运行。我的代码有什么根本的问题吗?

编辑:代码来自Basler的SDK,原始代码为:

Pylon::CTlFactory& TlFactory = Pylon::CTlFactory::GetInstance();

头文件:

Pylon::CTlFactory *TlFactory;

和cpp文件:

TlFactory = &Pylon::CTlFactory::GetInstance();

如前所述,当所有的代码都在一个函数中,它编译和运行良好,只有当我把它分解成类函数时,我才有问题…

引用不可赋值。当将引用作为类成员对象时,需要在构造函数中对其进行初始化。为此,使用构造函数初始化列表:

class myClass
{
public:
    myClass( type& some_var )
      : var( some_var )
    {}
private:
    type& var;
};

除了K-ballo的答案,请注意c++作用域规则的这个(有用的,IMO)特性:您可以将相同的名称公开为构造函数中的形式参数。这允许方便的代码切割&粘贴,避免需要梦想"使用一次"的名称。

class myClass
{
public:
    myClass( type& var )
      : var( var )
    {}
private:
    type& var;
};
class myClass
{
public:
    myClass() : var(Pylon::CTlFactory::GetInstance())
    {
        // rest of init logic
    }
private:
    Pylon::CTlFactory& var;
};