【发布时间】:2012-07-07 00:17:38
【问题描述】:
这是一个与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);
我收到编译器警告:error: invalid initialization of reference of type 'int&' from expression of type 'const int'。
那是关于什么的?我传递了一个int。它不应该自动变成const int&吗?为什么编译器会抱怨?
【问题讨论】:
-
提示:
T& object;-- 另外,const T& obj = nullptr没有任何意义,您不能初始化对nullptr的引用。 -
这是什么提示?这正是
object的声明方式。谢谢你,我会改变的。 -
这是一个提示,因为您无法从 const 引用初始化非 const 引用 -- const-correctness 101。
标签: c++ compiler-errors