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引用. 在任何情况下,如果您使用新的分配具有引用的对象作为数据成员,您正在为自己储存麻烦.这是您的问题,以确保在我超出范围之前删除对象(或者无论如何,确保对象在超出范围后不使用其成员对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |