编译下面的代码时,出现以下错误:
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);
}
错误从何而来?
最佳答案
在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
。
关于C++/错误“没有匹配的调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221985/