我正在尝试将函数从我正在使用的相机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();
如上所述,当所有代码都在一个函数中时,它编译并运行正常,只有当我将其分解为类函数时才会出现问题......
答案 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;
};