2010-03-04 14 views
9

, bir Yığın şablonu sınıf uygulama ediyorum, ama garip bir hata içine çalıştırmak: atar eleme hata

Stack<T>::top()

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

şuna benzer:
const T top() const { 
    checkElements(); 
    return (const T)(first_->data); 
} 

Stack<T>::checkElements() şöyle

:

void checkElements() { 
    if (first_==NULL || size_==0) 
     throw range_error("There are no elements in the stack."); 
} 

Yığın, depolama için bağlantılı düğümler kullanır, bu nedenle first_, ilk düğüme işaretçidir.

Neden bu hatayı alıyorum?

cevap

20

checkElements() işleviniz const olarak işaretlenmemiş ve const nitelikli nesneler üzerinde arama yapamazsınız. , this (top() çağrıldığı Stack örneği const olmayan olur bile) bir const Stack bir göstericidir top() yılında yani checkElements() hangi çağrı yapamazsınız

top() Ancak nitelikli const olduğu her zaman, bir const örneği gerektirir.

13

Bir const yönteminden const olmayan bir yöntemi çağıramazsınız. Bu, const niteleyicisini 'atardı.

Temel olarak, yöntemi çağırmanıza izin verirse, nesneyi değiştirebilir ve bu yöntem, yöntem imzasının sonundaki const öğesinin değiştirilmemesi sözünü bozar.

4

Bir const yönteminden const olmayan bir yöntemi çağırıyorsunuz.

2

Çünkü checkElements() const bildirilmemiş. Bu bildirim olmadan, bir const nesnesinde EEklemler çağrısı yapılamıyor.

İlgili konular