我试图通过类构造函数中的初始化列表初始化一个引用对象,我需要你的输入,为什么我不能用以下方式初始化它。我不允许以下列方式初始化引用吗?
class ObjectA
{
private:
char* _nameA;
int _velocityA;
public:
ObjectA(char* name, int velocity)
{
name = name;
_velocityA = velocity;
}
};
我在以下初始化列表中收到错误,其中类型为“ObjectA&”的引用(不是const限定的)无法使用“char *”类型的值进行初始化为什么我收到此错误?我做错了什么?
class ObjectB
{
private:
ObjectA& objA;
public:
ObjectB(char* engName, int _velocityA):objA(engName, _velocityA)
{
}
};
答案 0 :(得分:3)
你在这里尝试做的事没有任何意义。您正尝试使用新创建的对象初始化引用。引用需要指向现有对象。如果你没有,那么参考可能不是你想要的。
有关更多信息,请参阅此问题:Initialization of reference member requires a temporary variable C++
答案 1 :(得分:3)
问题是您尝试以与创建对象相同的方式初始化引用objA
。
ObjectB(char* engName, int _velocityA):objA(engName, _velocityA)
{
}
请记住objA
是引用,而不是指针或变量,因此objA(engName, _velocityA)
会调用ObjectA
的构造函数。
ObjectB
的构造函数应该将ObjectA
对象作为参数,以便引用objA
可以引用。
class ObjectB
{
private:
ObjectA& objA;
public:
ObjectB(ObjectA & a):objA(a)
{
}
};
int main()
{
ObjectA a("hello", 10);
ObjectB *b = new ObjectB(a) ;
}