参考变量的C ++初始化列表

时间:2011-12-15 06:19:11

标签: c++ reference

我试图通过类构造函数中的初始化列表初始化一个引用对象,我需要你的输入,为什么我不能用以下方式初始化它。我不允许以下列方式初始化引用吗?

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)
        {
        }
};

2 个答案:

答案 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) ;

}