C++/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;
};
错误发生在 diccTrie::clearIt
中,其实现为
diccTrie::iterador diccTrie::crearIt() const{
return iterador(this, raiz);
}
错误从何而来?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在
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;
introducedNodo
in global namespace as the name is not found, so the declaration of the constructor ofiterador
is in factiterador(const diccTrie* d, const ::Nodo* n)
, but notiterador(const diccTrie* d, const diccTrie::Nodo* n)
.You can add a forward declaration of
struct Nodo;
before the definition ofiterador
in classdiccTrie
. Then in the declaration ofiterador
's constructor,diccTrie::Nodo
would be found.将构造函数公开怎么样?
How about making the constructor public?