c++ - 错误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;
    }

谢谢!

最佳答案

您有一个错误C2270,因为您的busco函数是一个自由模板函数,它不属于类。因此const对签名没有意义:删除它。
如果您希望此函数是成员函数,请将其定义放在声明点(我猜是ABBImp类),或在声明前面加上类名,就像对Recuperar函数所做的那样。

本文翻译自 https://stackoverflow.com/questions/23976021/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c++ visual-studio-2012 compiler-errors modifiers non-member-functions


相关文章:

java - 从c ++(jni)调用Java函数根本不起作用

c# - 在WPF / C#和Qt / C ++之间选择[关闭]

c++ - 如何在单独的项目中包含C ++ DLL?

java - 编译错误:静态引用非静态方法

c++ - 在C ++中实现sql语句绑定的最佳方法

c++ - 插件中的UActorComponent派生类对函数调用没有反应

c# - 样式时,GridViewColumn标头绑定失败

c# - 无需单独安装或更新它即可与Windows XP,7、8一起使用的最佳.net框架版本

c - MPI_Irecv类型强制转换错误

c++ - constexpr默认默认构造函数