我有一个类,它有一个私有属性,它是对另一个类的引用:
class A {
public:
A();
A(B& anotherB);
private:
B& bRef;
}在我的A(B& anotherB)中,我可以这样做:
A::A(B& anotherB)
: bRef(anotherB) {
}但是A()又如何呢?我试过这个:
A::A()
: bRef(B()) {}但我得到这个错误' error :从类型‘B’的临时变量中初始化类型‘B&’的非常数引用无效。
如何使用B的默认构造函数在A中调用initialize B引用?
谢谢。
发布于 2010-03-05 11:21:03
你必须有一个真实的实例来初始化它。说: bRef(B())创建了一个临时的,它会立即被销毁,因此你的引用将是一个不再存在的对象,从而编译器错误。
你不需要初始化它,除非你基于它没有被初始化而做一些决定。在这种情况下,您可以使用bool initialized;成员来跟踪状态。
如果您想将其初始化为类似于NULL的值,请改用指针。
发布于 2010-03-05 11:45:37
如果你真的,真的想要使用一个引用,但仍然保留你的默认构造函数,你可以设置一个B的全局(或文件静态)实例,它代表一个空状态或默认状态,无论你想让你的默认A使用什么。
A::A()
: bRef(nullB) {}发布于 2010-03-05 11:25:32
如果您知道引用字段始终包含有效的引用,则应该使用引用字段对类进行建模。在你的例子中,你有一个默认的构造函数,你想让你的引用指向一个虚拟值,它应该更适合用指针字段来建模。您不能将NULL赋值给引用,也不能将其指向堆栈上创建的对象,并且该对象仅在作用域内有效。
https://stackoverflow.com/questions/2384360
复制相似问题