C++ 丢弃限定符错误
对于我的compsci类,我正在实现一个堆栈模板类,但遇到了一个奇怪的错误: Stack.h:在成员函数“C++ 丢弃限定符错误,c++,C++,对于我的compsci类,我正在实现一个堆栈模板类,但遇到了一个奇怪的错误: Stack.h:在成员函数“const T Stack::top()const[with T=int]”中: Stack.cpp:10:错误:将“void Stack::checkElements()[with T=int]”的“const Stack”作为“此””参数传递将丢弃限定符 Stack::top()如下所示: const T top() const { checkElements(); re
const T Stack::top()const
[with T=int]”中:
Stack.cpp:10:错误:将“void Stack::checkElements()
[with T=int]”的“const Stack
”作为“此”
”参数传递将丢弃限定符
Stack::top()
如下所示:
const T top() const {
checkElements();
return (const T)(first_->data);
}
void checkElements() {
if (first_==NULL || size_==0)
throw range_error("There are no elements in the stack.");
}
Stack::checkElements()
如下所示:
const T top() const {
checkElements();
return (const T)(first_->data);
}
void checkElements() {
if (first_==NULL || size_==0)
throw range_error("There are no elements in the stack.");
}
堆栈使用链接的节点进行存储,因此first\uu
是指向第一个节点的指针
为什么会出现此错误?不能从常量方法调用非常量方法。这将“丢弃”常量限定符 基本上,这意味着如果它允许您调用该方法,那么它可能会更改对象,这将打破不修改方法签名末尾的
常量提供的对象的承诺。您的checkElements()
函数未标记为const
,因此不能在const
限定对象上调用它
top()
,但是const是限定的,所以在top()
,中,这个是指向const堆栈的指针(即使调用top()
的堆栈实例恰好是非const
),所以不能调用checkElements()
它总是需要一个非常量实例。您正在从常量方法调用一个非常量方法 因为checkElements()未声明为常量
void checkElements() const {
if (first_==NULL || size_==0)
throw range_error("There are no elements in the stack.");
}
如果没有该声明,则无法对常量对象调用checkElements