我有以下代码:
class SomeClass {};
class SomeOtherClass {
SomeClass& someObj;
public:
SomeOtherClass() {someObj = SomeClass();}
};
我在SomeOtherClass
Constructor for 'SomeOtherClass' must explicitly initialize the reference member 'someObj'
的构造函数中收到错误。
所以我猜我的问题非常紧张。你如何初始化参考?
答案 0 :(得分:9)
您正在尝试存储对正在被立即销毁的临时对象的引用,因此肯定会出错;即使使用其他答案中描述的构造函数初始化列表。
引用应该指向一个存储在别处的对象,就像指针一样。你确定在这种情况下甚至需要使用引用吗?
答案 1 :(得分:7)
作为constructor initialization list的一部分:
SomeOtherClass() : someObj(SomeClass()) {}
更新:我应该提醒一下,这是你不应该逐字使用的东西,因为它会导致对即将死亡的临时对象的引用实例
这个想法是上面的,但你必须传入一个生命周期不短于你正在构建的SomeOtherClass
实例的对象。
答案 2 :(得分:3)
您必须在构造函数的初始化列表中初始化它,因为引用没有“default”或“null”初始化:
class SomeOtherClass {
SomeClass& someObj;
public:
SomeOtherClass(SomeClass& sc) : someObj(sc) {}
};
正如在另一个答案中指出的那样 编辑,您应该注意将您的引用初始化为一个对象,其生命周期与包含该引用的对象相同或更长。在上面的示例中,假设sc
比SomeOtherClass
实例更长。