Ошибка C2270: модификаторы не разрешены для функций, не являющихся членами

Я получаю эту ошибку при компиляции:

ошибка C2270: "busco": модификаторы не разрешены для функций, не являющихся членами

Я думаю, что понимаю причину, но я не знаю, как это исправить, если я возьму const я получаю ошибку C2662.

Вот код:

    template <class T>
    class ABBImp: public ABB<T> {
    public:
        const T& Recuperar(const T &e) const ;
    private:
        NodoABB<T> * busco(NodoABB<T> * arbol,T &e) const;
    protected:
        NodoABB<T>* arbol;
    };

    template <class T>
//If I take this const out I get the other error I talked about
    NodoABB<T>* busco(NodoABB<T> * arbol,T &e)const{
        if(a!=NULL){
            if(arbol->dato==e)
                return arbol;
            else if (arbol->dato<e)
                return busco(arbol->der,e);
            else
                return busco(arbol->izq,e);
        }else{
            return NULL;
        }
    }
    template <class T>
    const T& ABBImp<T>::Recuperar(const T &e) const{
        NodoABB<T> * aux=busco(arbol,e);
        return aux->dato;
    }

Спасибо!

1 ответ

Решение

У вас есть ошибка C2270, потому что ваш busco Функция - это бесплатная шаблонная функция, она не принадлежит классу. Так const не имеет смысла на подписи: удалить его.

Если вы хотели, чтобы эта функция была функцией-членом, поместите ее определение в точку объявления (я думаю, ABBImp класс), или префикс объявления с именем класса, как вы сделали для Recuperar функция.

Другие вопросы по тегам