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

时间:2011-10-10 22:25:52

标签: c++ class reference

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

type& var = type::init();

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

class myClass
{
private:
type& var;
};

我试图改变:

type& var;

要:

type* var;

当我将所有东西都放在一个函数中时,这很好用,但是当我尝试将它分解为类中的单独函数时,代码会编译但不会运行。我的代码有什么根本原因吗?

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

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

在头文件中:

Pylon::CTlFactory *TlFactory;

和cpp文件:

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

如上所述,当所有代码都在一个函数中时,它编译并运行正常,只有当我将其分解为类函数时才会出现问题......

3 个答案:

答案 0 :(得分:7)

参考不可转让。当您将引用作为类成员对象时,需要在构造函数中初始化它。为此,您使用构造函数初始化列表:

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

private:
    type& var;
};

答案 1 :(得分:0)

除了K-ballo的答案之外,请注意C ++范围规则的这个(有用的,IMO)功能: 您可以在构造函数中显示与formal参数相同的名称。这允许方便的代码切割和粘贴,避免梦想“使用一次”的名字。

class myClass
{
public:
    myClass( type& var )
      : var( var )
    {}

private:
    type& var;
};

答案 2 :(得分:0)

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