C ++ /错误“没有匹配的调用函数

时间:2011-11-22 04:26:35

标签: c++ function call match

编译下面的代码时,我收到以下错误:

error: no matching function for call to 'diccTrie::iterador::iterador(const diccTrie* const, diccTrie::Nodo* const&)'

class diccTrie{
public:
/* ... */
 class iterador{    
    private:
        const diccTrie* diccionario;
        const struct Nodo* actual;

        friend class diccTrie;

        iterador(const diccTrie* d, const Nodo* n): diccionario(d), actual(n){}
    };

    iterador crearIt() const;
private:

    struct Nodo
        {
            Nodo(const char c) :  padre(NULL), hijos(aed2::Lista<Nodo*>::Lista()), clave(c), significado(NULL) {};

            ~Nodo(){
                delete padre;
                delete significado;
                hijos.~Lista();
            }


            bool operator==(const Nodo& otro) const{
                if(otro.hijos.Longitud() != hijos.Longitud()){
                    return false;
                }
                else{
                    return otro.hijos == hijos && otro.padre == padre && otro.clave == clave && otro.significado == significado;
                }
            }

            Nodo* padre;
            aed2::Lista<Nodo*> hijos;
            char clave;
            const int* significado;
            };
    Nodo* raiz;

};

错误发生在diccTrie::clearIt中,实现为

diccTrie::iterador diccTrie::crearIt() const{
    return iterador(this, raiz);
}

错误来自哪里?

2 个答案:

答案 0 :(得分:3)

iterador的定义中,const struct Nodo* actual;在全局命名空间中引入了Nodo,因为找不到名称,所以iterador的构造函数的声明实际上是{ {1}},但不是iterador(const diccTrie* d, const ::Nodo* n)

您可以在课程iterador(const diccTrie* d, const diccTrie::Nodo* n)struct Nodo;的定义之前添加iterador的前瞻声明。然后在diccTrie的构造函数的声明中,找到iterador

答案 1 :(得分:1)

如何使构造函数公开?