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