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

Vector devuelve tamaño erroneo desde clase

Estas en el tema de Vector devuelve tamaño erroneo desde clase en el foro de C/C++ en Foros del Web. Bueno... tiempo que no posteaba una duda... Al grano... Tengo la siguiente clase... @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #ifndef LIBRERIA2_H #define    LIBRERIA2_H   ...
  #1 (permalink)  
Antiguo 17/12/2010, 19:32
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Vector devuelve tamaño erroneo desde clase

Bueno... tiempo que no posteaba una duda...

Al grano...

Tengo la siguiente clase...

Código C++:
Ver original
  1. #ifndef LIBRERIA2_H
  2. #define    LIBRERIA2_H
  3.  
  4.  
  5. class Libreria {
  6. public :
  7.     Libreria() {}
  8.     ~Libreria() {}
  9.     // Agrego unos libros al catalogo
  10.     void addBooks();
  11.     // Muestro los libros comprados
  12.     void boughtBooks();
  13.     // Muestor el catalogo
  14.     void catalogue();
  15.     // Compro un libro...
  16.     bool buyBook(int index);
  17.     // Arriendo un libro
  18.     bool rentBook(int index);
  19.     // Devuelvo un libro
  20.     bool returnBook(int index);
  21. private :
  22.     std::vector<Libro> vBookCatalogue;
  23.     std::vector<Libro> vBookBought;
  24.    
  25. };
  26.  
  27.  
  28. #endif    /* LIBRERIA2_H */

Luego en el main, tengo el siguiente código :

Código C++:
Ver original
  1. //#include <cstdlib>
  2. #include <iostream>
  3.  
  4. #include <vector>
  5.  
  6. #include "Libro.h"
  7. #include "Libreria2.h"
  8.  
  9. using namespace std;
  10.  
  11.  
  12. /**
  13.  * Agrego unos libros en duro
  14.  */
  15. void Libreria::addBooks() {
  16.     Libro lib;
  17.     lib.setLibAutor("Vargas Llosa");
  18.     vBookCatalogue.push_back(lib);
  19.     cout << vBookCatalogue.size();
  20.  
  21.     vector<Libro> v;
  22.     v.push_back(lib);
  23.     cout << v.size();
  24. }
  25.  
  26.  
  27. /*
  28.  *
  29.  */
  30. int main(int argc, char** argv) {
  31.  
  32.     Libreria * libreria = new Libreria;
  33.  
  34.     libreria->addBooks();
  35.  
  36.     delete libreria;
  37.  
  38.     return 0;
  39. }

Si imprimo el .size() del vector que declaré como privado en la clase (vBookCatalogue), me imprime 4294966094, lo cual es una brutalidad. En cambio, si imprimo el .size() de la variable que declaré como local en el método addBooks(), me imprime 1, lo que es correcto.

Siguiendo las referencias del método push_back y size, debería estar todo bien, y al parecer lo está... compila y ejecuta sin problemas, pero al debuggear, tira un error un tanto extraño.

Al debuggear, usando NetBeans 6.9 y MingW, me tira al archivo stl_construct.h, en la línea 81, donde se encuentra este código :

Código C++:
Ver original
  1. /**
  2.    * @if maint
  3.    * Constructs an object in existing memory by invoking an allocated
  4.    * object's constructor with an initializer.
  5.    * @endif
  6.    */
  7.   template<typename _T1, typename _T2>
  8.     inline void
  9.     _Construct(_T1* __p, const _T2& __value)
  10.     {
  11.       // _GLIBCXX_RESOLVE_LIB_DEFECTS
  12.       // 402. wrong new expression in [some_]allocator::construct
  13.       ::new(static_cast<void*>(__p)) _T1(__value); // Línea 81
  14.     }

Y los mensajes dicen :

Variables :
Error Variables

Callstack :
Error Callstack



La verdad no se que puede ser, y el error no es suficientemente claro como para poder buscarlo en google (y lo hice, aunque pude no haberlo hecho bien).

Espero me puedan ayudar. Como saben, no espero la solución escrita ni mucho menos, pero se agradecería una explicación, o algún link, o algo, no sé

Bueno, gracias. Saludos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #2 (permalink)  
Antiguo 18/12/2010, 07:26
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Vector devuelve tamaño erroneo desde clase

Que vergüenza me da comentar la solución...

Resulta que tenía 2 clases llamadas igual, pero en distintos archivos .h... le cambié el nombre a la clase que no uso, y se solucionó

Gracias por leer al menos. Pueden cerrar esto si quieren .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 18/12/2010, 09:43
Avatar de newboy_master  
Fecha de Ingreso: enero-2008
Ubicación: Granada
Mensajes: 882
Antigüedad: 16 años, 3 meses
Puntos: 46
Respuesta: Vector devuelve tamaño erroneo desde clase

En la programación, cualquier error por mínimo que sea, te hace darle vueltas a la cabeza un buen rato. y más con C/C++..

Por lo menos lo has solucionado, seguro que ese problema no te vuelve a pasar.

Salu2.
__________________
@jslirola - Programador Web Freelance.
  #4 (permalink)  
Antiguo 18/12/2010, 12:26
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Vector devuelve tamaño erroneo desde clase

Cita:
Iniciado por newboy_master Ver Mensaje
En la programación, cualquier error por mínimo que sea, te hace darle vueltas a la cabeza un buen rato. y más con C/C++..

Por lo menos lo has solucionado, seguro que ese problema no te vuelve a pasar.

Salu2.
Es cierto. Pero este lenguaje lo aprenderé me cueste lo que me cueste.

Saludos y gracias.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: clase, tamaño, vectores
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 18:42.