编译下面的代码时,我收到以下错误:
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);
}
错误来自哪里?
答案 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)
如何使构造函数公开?