Problema con manejo de lists y objetos con STL
Hola buenas, un saludo lo primero...
Mi problema es el siguiente, por una parte tengo una clase C1 que contiene un metodo virtual y por otra tengo otra clase que hereda de esta primera.
Lo que quiero hacer es ir recorriend un list denominado list<C1*> lista en el que amaceno una serie de objetos. Pero no se exactamente como hacerlo ya que de la manera que lo hago:
class CMatchChain:public C1
bool CMatchChain::Criteria(const char *szLine)
{
int ingIndex = 0;
list<CMatch*>::iterator p;
bool state;
for(p = m_lsMatch.begin(); p != m_lsMatch.end(); p++)
{
if(*p->Criteria(szLine)) == true)
{
state = true;
}
else
{
state = false;
break;
}
}
return(state);
}
Me da un error tal que así:
matchchain.cpp: In method `bool CMatchChain::Criteria(const char *)':
matchchain.cpp:28: request for member `Criteria' in `*p._List_iterator<CMatch *,CMatch *&,CMatch **>::operator ->()', which is of non-aggregate type `CMatch *'
matchchain.cpp:28: parse error before `=='
matchchain.cpp:35: break statement not within loop or switch
matchchain.cpp:36: confused by earlier errors, bailing out
Como puedo acceder a los objetos??
Gracias
Mi problema es el siguiente, por una parte tengo una clase C1 que contiene un metodo virtual y por otra tengo otra clase que hereda de esta primera.
Lo que quiero hacer es ir recorriend un list denominado list<C1*> lista en el que amaceno una serie de objetos. Pero no se exactamente como hacerlo ya que de la manera que lo hago:
class CMatchChain:public C1
bool CMatchChain::Criteria(const char *szLine)
{
int ingIndex = 0;
list<CMatch*>::iterator p;
bool state;
for(p = m_lsMatch.begin(); p != m_lsMatch.end(); p++)
{
if(*p->Criteria(szLine)) == true)
{
state = true;
}
else
{
state = false;
break;
}
}
return(state);
}
Me da un error tal que así:
matchchain.cpp: In method `bool CMatchChain::Criteria(const char *)':
matchchain.cpp:28: request for member `Criteria' in `*p._List_iterator<CMatch *,CMatch *&,CMatch **>::operator ->()', which is of non-aggregate type `CMatch *'
matchchain.cpp:28: parse error before `=='
matchchain.cpp:35: break statement not within loop or switch
matchchain.cpp:36: confused by earlier errors, bailing out
Como puedo acceder a los objetos??
Gracias
No estoy 100% seguro, ya que C++ no es mi lenguaje de elección.
Pienso que la plantilla del iterador sobrecarga el operador "->" para acceder a los miembros del objeto "contenido" así que si tú requieres de una segunda indirección debes escribirla explicitamente:
(*iter)->function(...)
en lugar de:
iter->function(...)
que es mas o menos lo que no te funciona.
Por otra parte, los cambios nuevos que se le han hecho al lenguaje C++, al incluir todos los objetos de la libreria STL dentro de un "namespace", pudieran causarte problemas adicionales. Esto lo digo, por que mis codigos antiguos (año 2000-2001) ya no me funcionan con los compiladores nuevos. Junto a la obsolecensia de mis programas, mis conocimientos también sufrieron... así que solo me queda desearte suerte. Seguro que algún pequeño cambio funcionara.
Un ultimo consejo: siempres que puedas, manten simple tu codigo. En lugar de ejecutar un loop como el que describes, trata de utilizar un "objeto función" y los servicios de la STL para aplicarlo a cada miembro de la lista.
Simplemente, programa un objeto que sobrecargue el operador "()" para que equivalga a lo que te sugiero.
Finalmente: ¿has pensado en usar otro lenguaje? ;-)
Pienso que la plantilla del iterador sobrecarga el operador "->" para acceder a los miembros del objeto "contenido" así que si tú requieres de una segunda indirección debes escribirla explicitamente:
(*iter)->function(...)
en lugar de:
iter->function(...)
que es mas o menos lo que no te funciona.
Por otra parte, los cambios nuevos que se le han hecho al lenguaje C++, al incluir todos los objetos de la libreria STL dentro de un "namespace", pudieran causarte problemas adicionales. Esto lo digo, por que mis codigos antiguos (año 2000-2001) ya no me funcionan con los compiladores nuevos. Junto a la obsolecensia de mis programas, mis conocimientos también sufrieron... así que solo me queda desearte suerte. Seguro que algún pequeño cambio funcionara.
Un ultimo consejo: siempres que puedas, manten simple tu codigo. En lugar de ejecutar un loop como el que describes, trata de utilizar un "objeto función" y los servicios de la STL para aplicarlo a cada miembro de la lista.
Simplemente, programa un objeto que sobrecargue el operador "()" para que equivalga a lo que te sugiero.
Finalmente: ¿has pensado en usar otro lenguaje? ;-)
