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