加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 错误:类型’int int’的类型’int int’的引用的无效初始

发布时间:2020-12-16 03:13:35 所属栏目:百科 来源:网络整理
导读:关于以下模板功能,这是一个关于 this question代码的无关问题. template class Tclass Object : public Container {public: T object; Object(const T obj) : object(obj) {}}; 这是调用构造函数的代码: template class Tvoid Array::add_element(const T e
关于以下模板功能,这是一个关于 this question代码的无关问题.
template <class T>
class Object : public Container {
public:
    T& object;

    Object(const T& obj) : object(obj) {}
};

这是调用构造函数的代码:

template <class T>
void Array::add_element(const T& element)
{
    vec.push_back(new Object<T>(element));
}

这段代码编译好,但是一旦在main中添加一行调用它:

Array array;
int i = 3;
array.add_element(i);

我得到一个编译器警告:错误:类型’int&’的引用的无效初始化从“const int”类型的表达式.

这是什么?我传递一个int,不应该自动变成一个const int&为了我?为什么编译器抱怨?

解决方法

obj是一个常量引用.对象是一个非常量引用.

您不能从const引用初始化一个非const引用,因为这样做会打破首先有一个const引用的目的.

如果您希望Object的实例能够修改传递给其构造函数的int,那么构造函数应该使用非const引用.如果没有,那么数据成员应该是一个const引用.

在任何情况下,如果您使用新的分配具有引用的对象作为数据成员,您正在为自己储存麻烦.这是您的问题,以确保在我超出范围之前删除对象(或者无论如何,确保对象在超出范围后不使用其成员对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读