Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Info 2] duda con imprimir datos de un objeto
Autor Mensaje
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 329
Agradecimientos dados: 61
Agradecimientos: 345 en 17 posts
Registro en: Sep 2012
Mensaje: #1
[Info 2] duda con imprimir datos de un objeto Dudas y recomendaciones Informática II (Electrónica)
Hola, bueno estoy intentando imprimir los datos privados de un objeto, pero tengo problemas, no logro hacerlo. Tengo el siguiente codigo:



class my_array
{
private:
int *p;
int tam;
int cant;
public:
void valores(void);
} //Solo pongo esto para no hacer la clase larga, valores me imprimiria los datos.

//Mi funcion para imprimir los datos:

void my_array::valores()
{
cout<<"Imprimo valores: ";
for(int i=0; cant <= i; i++)
{
cout<<p[i] << " ";
}
}

//El main:

int main(void)
{
my_array objeto(1,2,3); //Se inicia con valores 1,2y3 (p es puntero a int)

cout << "objeto " << objeto.valores();
return 0;

}



Deberia imprimir los numeros apuntados por p.... pero me tira el siguiente error cuando compilo:

C:\Clases qt\matias\my_array-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2008__Qt_SDK__Debug\..\my_array\main.cpp:113: error: C2679: '<<' binario : no se encontr¢ un operador que adopte un operando en la parte derecha de tipo 'void' (o bien no existe una conversi¢n aceptable)

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
24-05-2013 13:08
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fnliendomolina Sin conexión
Campeon del cubo Rubik
Mutig zu sein
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 122
Agradecimientos dados: 91
Agradecimientos: 26 en 20 posts
Registro en: Apr 2012
Facebook
Mensaje: #2
RE: [Info 2] duda con imprimir datos de un objeto
Si no vi mal, definiste la propiedad p como un puntero a tipo int. El puntero guarda una direccion en memoria de la variable que apunta. Si vos haces cout<<p; estarias imprimiendo la direccion de p, lo que vos queres es el contenido de p. Seria cout<<*p; (agregas el * porque "p" es un puntero)... Proba con eso, es lo raro que vi en el codigo.

Saludos
24-05-2013 13:40
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Abend Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 180
Agradecimientos dados: 27
Agradecimientos: 35 en 23 posts
Registro en: Feb 2013
Mensaje: #3
RE: [Info 2] duda con imprimir datos de un objeto
Tenes un problema conceptual. El operador << es un operador sobrecargado que utiliza objetos ostream para ir concatenandolo hasta mandarlo a cout que es la salida estandar. Vos estas poniendo la funcion valores que retorna void y el << no sabe qué chota hacer con eso.

Tenes dos opciones, o te ahorras el manejo de ostream poniendo por separado:

cout << "objeto ";
objeto.valores();

O en la funcion valores vas metiendo todo en un objeto ostream declarado local en la funcion y terminas retornando eso. El prototipo de la funcion seria:

& ostream valores (void)
24-05-2013 13:46
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fnliendomolina Sin conexión
Campeon del cubo Rubik
Mutig zu sein
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 122
Agradecimientos dados: 91
Agradecimientos: 26 en 20 posts
Registro en: Apr 2012
Facebook
Mensaje: #4
RE: [Info 2] duda con imprimir datos de un objeto
Fijate como tratas a esa propiedad "p" ya que es un puntero... ojo con los datos que quieras asignarles... no se como seras los set y get pero tene cuidado...
24-05-2013 13:47
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 329
Agradecimientos dados: 61
Agradecimientos: 345 en 17 posts
Registro en: Sep 2012
Mensaje: #5
RE: [Info 2] duda con imprimir datos de un objeto
Hola, no, porque lo estoy imprimiendo como "vector", el mensaje de error me lo tira en la linea 28 donde esta esto: cout << "objeto " << objeto.valores();

igual probe hacer lo que dijiste por las dudas, pero me tira otro error mas jaja.

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
24-05-2013 13:51
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
fnliendomolina Sin conexión
Campeon del cubo Rubik
Mutig zu sein
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 122
Agradecimientos dados: 91
Agradecimientos: 26 en 20 posts
Registro en: Apr 2012
Facebook
Mensaje: #6
RE: [Info 2] duda con imprimir datos de un objeto
Perdon dije cualquier cosa, el problema es lo que te puso el otro compañero, porque la funcion te retorna void. Ponelo por separado, si el cout lo tenes en la funcion, no hace falta mandar otro cout... que el objeto llame al metodo y listo.

Disculpa,
Saludos!
24-05-2013 13:52
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 329
Agradecimientos dados: 61
Agradecimientos: 345 en 17 posts
Registro en: Sep 2012
Mensaje: #7
RE: [Info 2] duda con imprimir datos de un objeto
jaja, geniaal! gracias, ahi entra a la funcion, pero no me imprime nada Confused no se que onda. Yo le agrego al objeto un valor asi:

objeto.add(10);
objeto.valores(); //Imprimo los valores (solo tendria el 10)

y esta es mi funcion add:



void my_array::add(int num)
{

p[cant] = num;
cant++;
}

Y no me imprime... solo me imprime "imprimiendo valores: "... y luego no pone mas nada (como si estuviera vacio)

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
24-05-2013 14:15
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Abend Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 180
Agradecimientos dados: 27
Agradecimientos: 35 en 23 posts
Registro en: Feb 2013
Mensaje: #8
RE: [Info 2] duda con imprimir datos de un objeto
Error numero 1:

for(int i=0; cant <= i; i++)

Acordate que la condicion es un 'mientras', no un 'hasta, tiene que ser i < cant (porque lo arrancaste con i=0)

Posible error numero 2:

Asumo que tenes un constructor metido por ahi que no lo mostraste. Estas inicializando cant a 0?

Error numero 3 (el ams grave)

En tu funcion add jamas estas dimensionando el puntero, tenes que usar new para asignarle memoria para agregarle un campo. Sino estas pisando zonas de memoria que no te pertenecen y podes hacer cualquier cosa.
24-05-2013 14:30
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 329
Agradecimientos dados: 61
Agradecimientos: 345 en 17 posts
Registro en: Sep 2012
Mensaje: #9
RE: [Info 2] duda con imprimir datos de un objeto
mira, ahi le saque el = pero sigue haciendo lo mismo, el constructor ya me reserva una memoria minima, y luego cuando hago el add controla que la cantidad no se pase. Si, tambien inicio cant =0. Pego todo el codigo asi esta mas claro por las dudas:

Este es el .h:



class my_array
{
private:
int *p;
int tam;
int cant;
void xxx_arr(int);
public:
my_array(int);
my_array();
my_array(int[], int, int); //Tambien puedo int * en lugar de int[]
my_array(const my_array&);

void add(int);
void ptr() const;
int cantidad(void) const {return cant;};

my_array operator =(const my_array &);
const int& operator[](int);
void valores(void);

~my_array();
};

#endif // MY_ARRAY_H


Este es el .cpp:



#include "my_array.h"

using namespace std;

my_array::my_array(int t)
{
xxx_arr(t);
}
my_array::my_array()
{
xxx_arr(3);
}

my_array::my_array(int vec[], int a, int b) //Paso pos inicioal y pos final
{
int c = b-a;
xxx_arr(c);
for(int i=0; c <= i; i++)//En lugar de hacer esto puedo usar la funcion memcpy para copiar los datos.
{
p[i] = vec[a+i];
}
cant = c;
}

my_array::my_array(const my_array& copia)
{
tam = copia.tam;
cant = copia.cant;
memcpy(p,copia.p,tam*sizeof(int));
}

my_array my_array::operator =(const my_array &j)
{
if(this != &j) //Controlo que no se haga r1 = r1
{
delete []p;
cant = j.cant;
tam = j.tam;
memcpy(p,j.p,tam*sizeof(int));
return (*this);
}else
{
return (*this);
}
}

const int& my_array::operator [](int sub_indice)
{
return p[sub_indice];
}

void my_array::valores()
{
cout<<"\n\nImprimo valores: ";
for(int i=0; cant < i; i++)
{
cout<<p[i] << " ";
}
cout<<"\n\n";
}

void my_array::xxx_arr(int sz)
{
cant=0;
tam = sz;
p = new int[sz];
}

void my_array::add(int num)
{
if(cant < tam)
{
p[cant] = num;
cant++;
}else
{
cout << "Falta de tamaño.\n";
int *nuevo = new int[tam+10];
tam = tam + 10;
memcpy(nuevo,p,cant*sizeof(int));
nuevo[cant] = num;
delete(p);//borro lo que tengo para luego redirigir el puntero
p = nuevo;
cant++;
cout << "Agregada memoria al objeto.\n";
}
}

my_array::~my_array()
{
delete [] p;
}

int main(void)
{
my_array r1;
int vec[]={43,4,3,5,76,54,33,67,7};

my_array objeto(vec, 0, 2);
cout << "r1 cantidad: " << r1.cantidad() << "\n";

objeto.add(10);
objeto.valores();

cout << "r1 cantidad: " << r1.cantidad() << "\n";
cout << "obejto desde vec cantidad: " << objeto.cantidad() << "\n";

objeto.add(13);
cout << "obejto desde vec cantidad: " << objeto.cantidad() << "\n";


objeto = r1;
cout << "obejto igualado a r1 cant: " << objeto.cantidad() << "\n";

return 0;

}


Perdon si comento algun error groso, es uno de mis primeros codigos (hecho en clase a los pedos porque no nos dan muchio tiempo para hacerlos) y es mi primera vez trabajando con objetos y clases. Gracias por la buena onda =D

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
24-05-2013 14:44
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Abend Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 180
Agradecimientos dados: 27
Agradecimientos: 35 en 23 posts
Registro en: Feb 2013
Mensaje: #10
RE: [Info 2] duda con imprimir datos de un objeto
Suponiendo que esta bien la reserva de memoria, sigue estando mal ese for de impresion jaja, es i<cant, no cant< i
24-05-2013 14:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Abend recibio 1 Gracias por este post
nutters (24-05-2013)
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 329
Agradecimientos dados: 61
Agradecimientos: 345 en 17 posts
Registro en: Sep 2012
Mensaje: #11
RE: [Info 2] duda con imprimir datos de un objeto
Geniaaal!! graciaas! ahi me imprime bien (r1 = se me muere en algun momento antes de que el codigo finalice, luego tengo que revisar eso, porque tampoco me la imprimia, pero ya puedo ver los valores. Graciaas!

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
24-05-2013 15:12
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.762
Agradecimientos dados: 136
Agradecimientos: 381 en 132 posts
Registro en: May 2008
Mensaje: #12
RE: [Info 2] duda con imprimir datos de un objeto
No lei nada
Dos problemas veo

Falta el costructor de my_array

y estas sacando por cout lo que te devuelve la funcion, pero devuelve void.

Como la funcion ya saca por ceout lo que deberias hacer es llamarla de una, no llamarla dentro del cout.
24-05-2013 15:13
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] brunodiaz recibio 1 Gracias por este post
Jarry (24-05-2013)
Elmats Sin conexión
Presidente del CEIT
Oh my gauss
********

Otra
UBA - Ciencias Exactas y Naturales

Mensajes: 1.307
Agradecimientos dados: 25
Agradecimientos: 102 en 68 posts
Registro en: Mar 2012
Mensaje: #13
RE: [Info 2] duda con imprimir datos de un objeto
Hacelo con while como te dice Abend. ¿Que te tira exactamente de error?

pd: ¿Por que no haces un constructor parametrizado de una?
24-05-2013 15:13
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Jarry Sin conexión
Anomalía de Belady
I know teh codez
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.945
Agradecimientos dados: 177
Agradecimientos: 183 en 82 posts
Registro en: May 2008
Mensaje: #14
RE: [Info 2] duda con imprimir datos de un objeto
(24-05-2013 15:13)brunodiaz escribió:  No lei nada
Dos problemas veo

Falta el costructor de my_array

y estas sacando por cout lo que te devuelve la funcion, pero devuelve void.

Como la funcion ya saca por ceout lo que deberias hacer es llamarla de una, no llamarla dentro del cout.

ese es el problema, el doble cout

No estoy necesariamente de acuerdo con lo que dice en el post de arriba
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
24-05-2013 17:02
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 329
Agradecimientos dados: 61
Agradecimientos: 345 en 17 posts
Registro en: Sep 2012
Mensaje: #15
RE: [Info 2] duda con imprimir datos de un objeto
El problema estaba en el cout y en un for cuando imprimia. Ya esta solucionado, gracias por la ayuda =)

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
25-05-2013 11:05
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.