Unpar de preguntas de C++

La primera:

- ¿Donde resolveis vuestras dudas de programacion :D :D :D :D :D ?


- A ver. Tengo un programa bastante tosco en el que tengo un problema. Tengo varios objetos corriendo cada uno en un hilo y querría que compartieran un vector (vamos, de los de la clase vector de STL). Asimismo tengo otra clase completamente distinta en otro hilo que tiene un puntero a cada uno de los otras clases. La cosa es que quiero acceder a los elementos de ese vector a través de la amalgama de punteros de una forma relativamente elegante.

Para entendernos un poquito

class contenedor : public hilo // vamos, que es un hilo
{
[...]
vector <int> *data;

[...]
}


class trabajador : public hilo
{
contenedor *objeto;

int getValor(int n)
// Devuelve un valor del vector del contenedor
{
return (objeto->data[n]);  // Esta linea no compila
}

}


La cosa es que no compila porque data no es exactamente un vector sino un puntero al vector por lo que no puedo usar el operador [].


Espero que se me entienda algo.

P.D. : Si has llegado hasta aqui sin marearte te mereces una [beer] [beer] [beer] [beer] [beer]
Vamos a ver si lo he entendido ;)

vector *data; <- vector de enteros, ¿ok?

return (objeto->data[n]) <- quieres acceder a la posición n-ésima de un vector, luego deberías hacer:

return objeto->data->at(n);

Espero haber sido de ayuda.
Mirate la interfaz de la clase vector para saber como sacar un elemento de una instancia de esa clase. Lo elegante elegante seria que esa clase hubiera sobrecargado los operadores [] (mira por si acaso estuvieran sobrecargados, que no lo se). Seguramente se saquen con at, como dice Zhul

De todas formas fijate que tienes un vector de enteros y la funcion getValor devuelve un entero. Tendras que hacer alguna conversion por ahi ;)

Saludos
2 respuestas