Problema con manejo de lists y objetos con STL

ferf
04 de Marzo del 2004
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

ivan
04 de Marzo del 2004
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? ;-)