引用变量的 C++ 初始化列表

标签 c++ reference

我正在尝试通过类构造函数中的初始化列表来初始化一个引用对象,我需要您的意见来说明为什么我无法通过以下方式初始化它。我不能用下面的方式初始化引用吗?

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/

相关文章:

c++ - 将 16 位深度的 CvMat* 转换为 8 位深度

rust - 为什么不能在同一结构中存储值和对该值的引用?

python - 在 Python 中存储对引用的引用?

Excel SUMIF 与 OR 使用单元格引用

c++ - 在 matlab 中编写一个非常基本的 mex 函数

c++ - eXosip:登录总是在第一次尝试时失败

C++ c2664 错误 "cannot convert argument 1 from std::string to _Elem *"

java - 如何将基类型对象分配给父类型引用?

c++ - 绑定(bind)到函数参数的引用会延长该临时对象的生命周期吗?

c++ - 使用左值引用作为非类型模板参数