我正在尝试通过类构造函数中的初始化列表来初始化一个引用对象,我需要您的意见来说明为什么我无法通过以下方式初始化它。我不能用下面的方式初始化引用吗?
class ObjectA
{
private:
char* _nameA;
int _velocityA;
public:
ObjectA(char* name, int velocity)
{
name = name;
_velocityA = velocity;
}
};
我在下面的初始化列表中得到一个错误,它说类型“ObjectA &”(非const-qualified)的引用不能用类型“char *”的值初始化为什么我我收到这个错误?我做错了什么?
class ObjectB
{
private:
ObjectA& objA;
public:
ObjectB(char* engName, int _velocityA):objA(engName, _velocityA)
{
}
};
最佳答案
问题是您试图以与创建对象相同的方式初始化引用 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) ;
}
关于引用变量的 C++ 初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8515921/