实参时丢弃了类型 discards qualifiers discards qualifiers问题
百思不得其解,于是百度,google吧。。
发现Stackoverflow上也有人有相同的问题
下面是他的问题:
For my compsci class, I am implementing a Stack template class, but have run into an odd error:
Stack.h: In member function ‘
const T Stack<T>::top() const[with T = int]’:Stack.cpp:10: error: passing ‘
const Stack<int>’ as ‘this’ argument of ‘void Stack<T>::checkElements()[with T = int]’ discards qualifiers
Stack<T>::top() looks like this:
const T top() const {
checkElements();
return (const T)(first_->data);
}
Stack<T>::checkElements() looks like this:
void checkElements() {
if (first_==NULL || size_==0)
throw range_error("There are no elements in the stack.");
}
The stack uses linked nodes for storage, so first_ is a pointer to the first node.
Why am I getting this error?
正确答案是
Your checkElements() function is not marked as const so you can't call it on const qualified objects.
top(), however is const qualified so in top(), this is a pointer to a const Stack (even if theStack instance on which top() was called happens to be non-const), so you can't callcheckElements() which always requires a non-const instance.
意思是说 在一个加了const限定符的成员函数中,不能够调用 非const成员函数。
因为如果调用了非const成员函数,就违反了const成员函数不改变对象的规定。
而error:...discards qualifiers 的意思就是缺少限定符
因此,他的解决办法很简单了 ,只要将checkElements()函数申明改为 checkElements()const就行了

浙公网安备 33010602011771号