C++/error"没有匹配的调用函数

发布于 2024-12-17 03:57:51 字数 1506 浏览 0 评论 0 原文

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

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);
}

错误从何而来?

When compiling the code below, I get the following error:

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;

};

The error occurrs in diccTrie::clearIt which is implemented as

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

Where does the error come from?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

带刺的爱情 2024-12-24 03:57:51

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

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

In the definition of iterador, const struct Nodo* actual; introduced Nodo in global namespace as the name is not found, so the declaration of the constructor of iterador is in fact iterador(const diccTrie* d, const ::Nodo* n), but not iterador(const diccTrie* d, const diccTrie::Nodo* n).

You can add a forward declaration of struct Nodo; before the definition of iterador in class diccTrie. Then in the declaration of iterador's constructor, diccTrie::Nodo would be found.

鹤仙姿 2024-12-24 03:57:51

将构造函数公开怎么样?

How about making the constructor public?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文