En C++ no hace falta usar los typedef para las estructuras:
El siguiente código en C++...
struct tDatos
{
string nombre;
int edad;
};
... es equivalente a tu versión en C:
struct {
string nombre;
int edad;
}tDatos;
No es un fallo, pero el código tiene menos basura y eso se agradece
El fallo te da porque tu has declarado lista.datos como un puntero... no como un array de punteros.
La siguiente instrucción sí sería válida:
lista.datos = datosPersona;
Aún así, si lo que quieres es almacenar una lista de punteros, puedes usar mejor un contenedor de C++.
El más común es std::vector:
struct tLista
{
std::vector< tDatosPtr > datos;
};
int main( )
{
tLista lista;
tDatosPtr datosPersona = new tDatos;
datosPersona->nombre = "pepe";
datosPersona->edad = 12;
lista.datos.push_back( datosPersona );
int numero_elementos = lista.datos.size( );
};
La otra opción es declarar lista.datos como un puntero doble:
struct tLista{
int cont;
tDatosPtr* datos;
};