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

C++ C++/“错误”;没有匹配的调用函数,c++,function,call,match,C++,Function,Call,Match,编译下面的代码时,出现以下错误: error: no matching function for call to 'diccTrie::iterador::iterador(const diccTrie* const, diccTrie::Nodo* const&)' 错误从何而来?如何公开构造函数?如何公开构造函数?在iterador的定义中,const struct Nodo*actual在全局命名空间中引入了Nodo,因为找不到名称,所以iterador构造函数的声明实际上是i

编译下面的代码时,出现以下错误:

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


错误从何而来?

如何公开构造函数?

如何公开构造函数?

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


您可以添加
struct Nodo的正向声明在类
diccTrie
中定义
iterador
之前。然后在
iterador
的构造函数声明中,将找到
diccTrie::Nodo

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


您可以添加
struct Nodo的正向声明在类
diccTrie
中定义
iterador
之前。然后在
iterador
的构造函数声明中,会找到
diccTrie::Nodo

没有必要,因为
diccTrie
diccTrie::iterador
的朋友。没有必要,因为
diccTrie
diccTrie::iterador
的朋友,谢谢……如果在iterador类的定义之前添加struct Nodo的前向声明,我会得到以下错误:O\Trie\diccTrie.h | 46 |错误:“struct diccTrie::Nodo”用不同的访问重新声明|我假设您在
public:
之后添加了它,因此它被声明为public。您应该将它添加到private部分,因为它实际上是private。如下所示:
private:struct Nodo
公共:类iterador{..
hi,谢谢….如果在iterador类的定义之前添加struct Nodo的前向声明,我会得到以下错误:O\Trie\diccTrie.h | 46 | error:'struct diccTrie::Nodo'用不同的访问权重新声明|我假设您在
public:
之后添加了它,因此它被声明为public。您应该在private部分添加它,因为它是我的它实际上是私有的。如下所示:
private:struct Nodo;
public:class iterador{..
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::iterador diccTrie::crearIt() const{
    return iterador(this, raiz);
}