Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Usar valores de un objeto desde un puntero.

Estas en el tema de Usar valores de un objeto desde un puntero. en el foro de C/C++ en Foros del Web. Hola. tengo una clase que se llama particula. me creo una instancia. vector<particula> miparticula; for(int i=0;i<miparticula.size();i++) { printf("IDS::%d\n",miparticula[i].id); esto funciona bien, pero si me creo ...
  #1 (permalink)  
Antiguo 30/05/2011, 06:37
 
Fecha de Ingreso: noviembre-2009
Mensajes: 36
Antigüedad: 14 años, 5 meses
Puntos: 0
Usar valores de un objeto desde un puntero.

Hola.

tengo una clase que se llama particula.

me creo una instancia.

vector<particula> miparticula;

for(int i=0;i<miparticula.size();i++)
{
printf("IDS::%d\n",miparticula[i].id);

esto funciona bien, pero si me creo un puntero no.

vector<particula> *referenciaparticulas;

referenciaparticulas = &miparticula;

for(int i=0;i<referenciaparticulas->size();i++)//esto no da problemas.
{
printf("IDS::%d\n",referenciaparticulas[i]->id); //me da error aquí.


objetos.cc: In function ‘void colision_particulas()’:
objetos.cc:1104:45: error: base operand of ‘->’ has non-pointer type ‘std::vector<particula>’
make: *** [objetos.o] Error 1
  #2 (permalink)  
Antiguo 30/05/2011, 07:51
 
Fecha de Ingreso: noviembre-2009
Mensajes: 36
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Usar valores de un objeto desde un puntero.

Me he creado un código mas fácil de tratar.


#include <QtCore/QCoreApplication>
#include<stdio.h>
#include<vector>

using namespace std;

class primera
{
public:
int x;
};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
primera pri;
primera *sec;
sec = &pri;
pri.x=1;
printf("%d\n",pri.x);
printf("%d\n",sec->x);
vector<primera> primus;
vector<primera> *secus;
primus.resize(2);
for(unsigned int i=0;i<primus.size();i++)
primus[i].x=2;
for(unsigned int i=0;i<primus.size();i++)
printf("%d\n", primus[i].x);
for(unsigned int i=0;i<secus->size();i++)
printf("%d\n", secus[i]->x);
return a.exec();
}

C:/Users/Tawky/Desktop/punt/punt-build-desktop/../punt/main.cpp:30: error: base operand of '->' has non-pointer type 'std::vector<primera, std::allocator<primera> >'
  #3 (permalink)  
Antiguo 30/05/2011, 08:04
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Usar valores de un objeto desde un puntero.

No veo que asignes nada a secus antes de intentar acceder a ello.
  #4 (permalink)  
Antiguo 30/05/2011, 09:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Usar valores de un objeto desde un puntero.

primus y secus tiene esta definicion:

vector<primera> primus;

vector<primera> *secus;

la clase vector tiene un sobre carga con el operador [ ]. Con primus esta bien usado los cochetes porque primus es del tipo vector. Pero cuando lo usas con secus esta mal, ya que secus es un puntero y no un objeto vector. Entonces no vale la sobrecarga de los cochetes, al ser puntero los corchetes funcionana como si fueses un array, entonces:

secus[i] te estaria dando el i-esimo vector (el cual no existe) y al aplicarle el operador "->" te reconoce que estaba esperando un puntero y no un objeto.

Lo que deberias hacer es:

printf("%d\n", (*secus)[i]->x);
  #5 (permalink)  
Antiguo 01/06/2011, 08:27
 
Fecha de Ingreso: noviembre-2009
Mensajes: 36
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Usar valores de un objeto desde un puntero.

Gracias. Solucionado así :

#include <QtCore/QCoreApplication>
#include<stdio.h>
#include<vector>

using namespace std;

class primera
{
public:
int x;
};

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
primera pri;
primera *sec;
sec = &pri;
pri.x=1;
printf("%d\n",pri.x);
printf("%d\n",sec->x);
vector<primera> primus;
primus.resize(2);
primera* secus;
for(unsigned int i=0;i<primus.size();i++)
primus[i].x=2;
for(unsigned int i=0;i<primus.size();i++)
printf("%d\n", primus[i].x);
secus = &primus[0];
for(unsigned int i=0;i<primus.size();i++)
{
printf("%d\n", secus[i].x);
}
return a.exec();
}

Etiquetas: objeto, puntero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:23.