C/Visual C - Ayuda con la CList (VC++ 6)

 
Vista:

Ayuda con la CList (VC++ 6)

Publicado por Nelek (816 intervenciones) el 11/04/2006 15:10:37
Hola a todos,

Como ya he comentado en otros posts, estoy con el Proyecto Final de Carrera en VC++, después de haber logrado aclararme con la metódica de las MFC y de haber hablado con mi tutor del proyecto (el cual tiene menos idea de esto de lo que yo creía) y a raiz de algunas de vuestras respuestas, me he puesto a reestructurar el programa antes de seguir avanzando. Con lo de la diferencia de Vista/Documento ya me he aclarado, pero ahora me ha salido un problema que me tiene atascado.

Yo tengo una clase genérica (al añadir clases, "clase generica" en el ComboBox de arriba a la derecha) derivada publicamente de CObject. Mi clase se llama CInputData y, en ella, guardo los distintos parametros de las señales de entrada de mi proceso (con metodos de Get y Set, sin más complicaciones). Hasta ahora lo que hacia era: En el CFPSDoc (FPS es el nombre de mi proyecto) creaba un array con el siguiente comando: "CInputData m_aInDataArray[MAXIN]" y luego podia acceder perfectamente a todos sus metodos a traves de (por ejemplo) "m_aInDataArray[i].Get... ()" pero por la dificultad que me presenta cuando quiero eliminar un elemento del array y reordenarlo creo que me es más conveniente usar la "CList" que ofrece el MFC, ya que permite añadir o eleminar al principio, al final, en el medio... desplazando sus miembros miembros, sustituirlo por otro...

Para ello ahora lo que hago es declarar "CList <CInputData, CInputData> m_InDataList" pero resulta que, al compilar me sale 4 veces el mismo fallo:

afxtempl.h(1064) : error C2664: 'struct __POSITION *__thiscall CList<class CInputData,class CInputData>::AddTail(class CInputData)' : Conversion del parametro 1 de 'class CInputData' en 'class CInputData' imposible. Ningun constructor para la clase 'CInputData' disponible

y al darle doble click al fallo se me va a la plantilla de la CList, señalandome el siguiente punto del codigo:

void CList<TYPE, ARG_TYPE>::Serialize(CArchive& ar)
{ ASSERT_VALID(this);
CObject::Serialize(ar);

if (ar.IsStoring())
{ ar.WriteCount(m_nCount);
for (CNode* pNode = m_pNodeHead; pNode != NULL; pNode = pNode->pNext)
{ ASSERT(AfxIsValidAddress(pNode, sizeof(CNode)));
SerializeElements<TYPE>(ar, &pNode->data, 1);
}
}
else
{ DWORD nNewCount = ar.ReadCount();
while (nNewCount--)
{ TYPE newData;
SerializeElements<TYPE>(ar, &newData, 1);
-----> AddTail(newData); <---- AQUI ES DONDE ME MARCA EL COMPILADOR
}
}
}

Cómo podría evitarlo y hacer que me funcionara? tengo que cambiar la declaración de la Lista? la de la Clase CInputData? Crear algun constructor de alguna manera especial?
He hecho ejemplos con elementos sencillos (listas de enteros, de strings...) y me funciona bien, asi que ando totalmente perdido.

Os agradeceré (y mucho) toda la ayuda que me podais prestar, ya que esoty totalmente bloqueado en este punto y no puedo seguir con la reestructuración.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder