我想声明对类的引用类似于指向类的指针作为它自己的成员变量。以下是我编写的代码,但我现在陷入困境,如何进一步创建这样一个类的对象,因为即使我编写默认构造函数或构造函数来初始化var
,编译器也总是会出错。 / p>
class Test2
{
private:
Test2& testRef;
int var;
public:
Test2( int x, Test2 testObj ) : var( x ), testRef( testObj )
{
}
};
我需要做些什么来创建这样的类的对象,或者根本不可能这样做。如果不可能,为什么不编译器只是给出一个错误,说你不能引用自己的类。
答案 0 :(得分:5)
如果您有引用成员,则必须在所有构造函数中初始化它,因为必须初始化引用。甚至是你的默认构造函数。由于您创建的此类的第一个对象将没有其他任何可以引用的对象,因此您必须将其引用给自己。例如:
Test2() :testRef(*this) {}
答案 1 :(得分:0)
您尝试将对象的临时副本传递给引用。 如果你在构造函数中传递引用,那就没问题了:
Test2( int x, Test2& testObj ) : var( x ), testRef( testObj )
{
}
补充问题:你需要你的引用非常量吗? 如果您不修改对象,可能最好使用const引用:
class Test2
{
private:
const Test2& testRef;
public:
Test2( int x, const Test2& testObj ) : var(x), testRef(testObj) {}
};
私人: Test2的&安培; testRef; int var;
公共: Test2(int x,Test2 testObj):var(x),testRef(testObj) {
}
};
此外,您应该按照与声明相同的顺序进行初始化:
Test2(int x, const Test2& testObj) : testRef(testObj), var(x) {}