C++ 二进制';[';:未找到接受const Stack<;int>;类型左侧操作数的运算符;
我已经做了一个堆栈实现(使用单链表,也是由我实现的),当试图重载“时,C++ 二进制';[';:未找到接受const Stack<;int>;类型左侧操作数的运算符;,c++,operator-overloading,C++,Operator Overloading,我已经做了一个堆栈实现(使用单链表,也是由我实现的),当试图重载“时,操作符[]是非常量的,这就是编译器抱怨的原因 您可以添加一个const重载以使i工作: T operator[](const int index) const { return stack[index]; } 您的运算符[]是非常量的,这就是编译器抱怨的原因 您可以添加一个const重载以使i工作: T operator[](const int index) const { return stack[inde
操作符[]
是非常量的,这就是编译器抱怨的原因
您可以添加一个const
重载以使i工作:
T operator[](const int index) const {
return stack[index];
}
您的
运算符[]
是非常量的,这就是编译器抱怨的原因
您可以添加一个const
重载以使i工作:
T operator[](const int index) const {
return stack[index];
}
通常,元素访问应该有两个重载。一个重载用于返回常量引用的
const
实例:
const T& operator[](const int index) const {
return stack[index]; // ^^ -----------
}
T& operator[](const int index) {
return stack[index];
}
以及返回一个引用的函数:
const T& operator[](const int index) const {
return stack[index]; // ^^ -----------
}
T& operator[](const int index) {
return stack[index];
}
是否提供返回非常量引用取决于您,但您得到了错误,因为您没有常量堆栈的运算符[]
注意,参数上的const
不是方法签名的一部分,而只是在方法内部有意义。您可以将方法声明为T&operator[](int-index)
,这将是相同的方法。此处的常量
仅阻止您在方法内部修改索引。通常,元素访问应该有两个重载。一个重载用于返回常量引用的常量
实例:
const T& operator[](const int index) const {
return stack[index]; // ^^ -----------
}
T& operator[](const int index) {
return stack[index];
}
以及返回一个引用的函数:
const T& operator[](const int index) const {
return stack[index]; // ^^ -----------
}
T& operator[](const int index) {
return stack[index];
}
是否提供返回非常量引用取决于您,但您得到了错误,因为您没有常量堆栈的运算符[]
PS:请注意,参数上的const
不是方法签名的一部分,但仅在方法内部有意义。您可以将方法声明为T&operator[](int index)
,它将是相同的方法。此处的const
仅阻止您在方法内部修改index