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

posible problema con una clase

Estas en el tema de posible problema con una clase en el foro de C/C++ en Foros del Web. hola a todos, tengo un error de compilacion con mi programa, como es muy largo todo el codigo tenia pensado si me podian ayudar a ...
  #1 (permalink)  
Antiguo 26/03/2012, 10:54
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 5 meses
Puntos: 25
posible problema con una clase

hola a todos, tengo un error de compilacion con mi programa, como es muy largo todo el codigo tenia pensado si me podian ayudar a encontrar el problema leyendolo de a poco, por ahora comenzando con la clase principal con la cual se genera el problema, para ver si esta bien echa:

bueno, este es el codigo de la clase:

ARCHIVO ".h":

Código C++:
Ver original
  1. //---------------------------------------------------------------------------
  2.  
  3. #ifndef cmesaH
  4. #define cmesaH
  5. #include "cproductos.h"
  6. #include <vector>
  7.  
  8. using namespace std;
  9. //---------------------------------------------------------------------------
  10.  
  11. class Mesa{
  12.  
  13. private:
  14.  
  15. UnicodeString __Mozo;
  16.  
  17. vector<Producto*> __Consumo;
  18. vector<float> __Cantidad;
  19.  
  20. int __Numero;
  21. float __Monto;
  22.  
  23. Mesa *__Siguiente;
  24.  
  25. public:
  26.  
  27.    __property float Total= {read= __Monto, write= __Monto};
  28.    __property int Numero_Mesa= {read= __Numero, write= __Numero};
  29.    __property UnicodeString Mozo= {read= __Mozo, write= __Mozo};
  30.    __property Mesa* Siguiente= {read= __Siguiente, write= __Siguiente};
  31.    __property vector<Producto*> Consumo= {read= __Consumo};
  32.    __property vector<float> Cantidad= {read= __Cantidad};
  33.  
  34.    Mesa(int Numero, UnicodeString Mozo);
  35.    Mesa(Mesa *__Mesa);
  36.  
  37.    ~Mesa();
  38.  
  39.    int Buscar(Producto *__Producto);
  40.  
  41.    void Ordenar(){};
  42.    bool Agregar(Producto *__Producto, float __Cantidad);
  43.  
  44.    Producto* Quitar(Producto *__Producto);
  45.    bool Quitar(UnicodeString __Nombre, float __Cantidad);
  46.  
  47.  
  48.    friend class Lista_Mesa;
  49. };
  50.  
  51. //---------------------------------------------------------------------------
  52.  
  53. class Lista_Mesa{
  54.  
  55. private:
  56.  
  57. Mesa *__Primero, *__Ultimo;
  58.  
  59. public:
  60.  
  61. __property Mesa* Primero= {read= __Primero, write= __Primero};
  62. __property Mesa* Ultimo= {read= __Ultimo};
  63.  
  64. Lista_Mesa(){this->__Primero= NULL; this->__Ultimo=NULL;};
  65.  
  66.  
  67. Mesa* Buscar_Mesa(int Numero);
  68. Mesa* Buscar_Ultima_Mesa(int Numero);
  69.  
  70. bool Nueva_Mesa(int Numero, UnicodeString __Mozo);
  71. bool Nueva_Mesa(Mesa *__Mesa, bool __Repetir = false);
  72.  
  73. Mesa* Cobrar(int Numero_Mesa);
  74.  
  75. };
  76. #endif


ARCHIVO ".cpp":

Código C++:
Ver original
  1. //---------------------------------------------------------------------------
  2.  
  3.  
  4. #pragma hdrstop
  5.  
  6. #include "cmesa.h"
  7. //---------------------------------------------------------------------------
  8.  
  9. Mesa::Mesa(int Numero,UnicodeString Mozo){
  10.  
  11. this->__Numero= Numero;
  12. this->__Mozo= Mozo;
  13. this->__Monto= 0;
  14. }
  15. //---------------------------------------------------------------------------
  16.  
  17. Mesa::Mesa(Mesa *__Mesa){
  18.  
  19. this->__Numero= __Mesa->Numero_Mesa;
  20. this->__Mozo= __Mesa->Mozo;
  21. this->__Monto= __Mesa->Total;
  22.  
  23. for (unsigned int i = 0; i < __Mesa->Consumo.size(); i++)
  24.      this->Agregar(__Mesa->Consumo[i], __Mesa->Cantidad[i]);
  25.  
  26. }
  27.  
  28. //---------------------------------------------------------------------------
  29.  
  30. Mesa::~Mesa(){
  31. __Consumo.erase(__Consumo.begin(), __Consumo.end());
  32. __Cantidad.erase(__Cantidad.begin(), __Cantidad.end());
  33. }
  34.  
  35. //---------------------------------------------------------------------------
  36.  
  37. bool Mesa::Agregar(Producto *__Producto, float __Cantidad){
  38.  
  39.  
  40. int Posicion= this->Buscar(__Producto);
  41.  
  42. if (Posicion == -1){
  43.  
  44. Producto *__Nuevo= new Producto(__Producto);
  45.  
  46. this->__Consumo.push_back(__Nuevo);
  47. this->__Cantidad.push_back(__Cantidad);
  48.  
  49. }else this->__Cantidad.at(Posicion)+= __Cantidad;
  50.  
  51. this->__Monto+= __Producto->Precio * __Cantidad;
  52.  
  53. return 1;
  54.  
  55. }
  56.  
  57. //---------------------------------------------------------------------------
  58.  
  59.  
  60. Producto* Mesa::Quitar(Producto *__Producto){
  61.  
  62. Producto *Devolver= NULL;
  63.  
  64.  
  65. for (unsigned int i = 0; i < this->__Consumo.size(); i++) {
  66.    if (this->__Consumo[i] == __Producto) {
  67.  
  68.             Devolver= __Producto;
  69.             this->__Consumo[i]= this->__Consumo[this->__Consumo.size()-1];
  70.             this->__Consumo.pop_back();
  71.  
  72.             this->__Cantidad[i]= this->__Cantidad[this->__Cantidad.size()-1];
  73.             this->__Cantidad.pop_back();
  74.  
  75.             break;
  76.    }
  77. }
  78. return Devolver;
  79. }
  80.  
  81.  
  82. //---------------------------------------------------------------------------
  83.  
  84. int Mesa::Buscar(Producto *__Producto){
  85.  
  86.  
  87. for (unsigned int i = 0; i < this->__Consumo.size(); i++){
  88.    if ((this->__Consumo.at(i)->Nombre == __Producto->Nombre) &&
  89.        (this->__Consumo.at(i)->SubTipo == __Producto->SubTipo))
  90.  
  91.        return i;
  92.        }
  93.  
  94.  
  95. return -1;
  96.  
  97. }
  98.  
  99. //---------------------------------------------------------------------------
  100.  
  101. bool Mesa::Quitar(UnicodeString __Nombre, float __Cantidad){
  102.  
  103. for (unsigned int i = 0; i < this->__Consumo.size(); i++)
  104.  
  105.     if ((this->__Consumo[i]->Nombre== __Nombre) &&
  106.         (this->__Cantidad[i] == __Cantidad)){
  107.  
  108.          this->__Monto-= this->__Consumo[i]->Precio * this->__Cantidad[i];
  109.  
  110.          this->__Consumo[i]= this->__Consumo[this->__Consumo.size()-1];
  111.          this->__Consumo.pop_back();
  112.  
  113.          this->__Cantidad[i]= this->__Cantidad[this->__Cantidad.size()-1];
  114.          this->__Cantidad.pop_back();
  115.  
  116.          return 1;
  117.          }
  118.  
  119. return 0;
  120. }
  121.  
  122. //---------------------------------------------------------------------------
  123.  
  124.  
  125.  
  126.  
  127. //---------------------------------------------------------------------------
  128.  
  129. bool Lista_Mesa::Nueva_Mesa(int Numero, UnicodeString __Mozo){
  130.  
  131. if (this->Buscar_Mesa(Numero)) return 0;
  132.  
  133. Mesa *Aux= new Mesa(Numero, __Mozo);
  134.  
  135.  
  136. if (this->Ultimo) Ultimo->__Siguiente= Aux;
  137.  
  138. this->__Ultimo= Aux;
  139. this->__Ultimo->__Siguiente= NULL;
  140.  
  141. if (!this->__Primero) this->__Primero= Aux;
  142.  
  143. return 1;
  144. }
  145.  
  146. //---------------------------------------------------------------------------
  147.  
  148. bool Lista_Mesa::Nueva_Mesa(Mesa *__Mesa, bool __Repetir){
  149.  
  150. if (__Repetir == false)
  151.     if (this->Buscar_Mesa(__Mesa->Numero_Mesa)) return 0;
  152.  
  153. if (this->__Ultimo) Ultimo->__Siguiente= __Mesa;
  154.  
  155. this->__Ultimo= __Mesa;
  156. this->__Ultimo->__Siguiente= NULL;
  157.  
  158. if (!this->__Primero) this->__Primero= __Mesa;
  159.  
  160. return 1;
  161. }
  162.  
  163. //---------------------------------------------------------------------------
  164.  
  165. Mesa* Lista_Mesa::Buscar_Mesa(int Numero){
  166.  
  167. Mesa *Devolver= this->__Primero;
  168.  
  169. while (Devolver){
  170.  
  171.    if (Devolver->__Numero == Numero) return Devolver;
  172.  
  173. Devolver= Devolver->Siguiente;
  174. }
  175.  
  176. return Devolver;
  177. }
  178. //---------------------------------------------------------------------------
  179.  
  180. Mesa* Lista_Mesa::Buscar_Ultima_Mesa(int Numero){
  181.  
  182. Mesa *Devolver= NULL;
  183. Mesa *Aux= this->__Primero;
  184.  
  185. while (Aux){
  186.  
  187.    if (Aux->__Numero == Numero) Devolver = Aux;
  188.  
  189. Aux= Aux->Siguiente;
  190. }
  191.  
  192. return Devolver;
  193. }
  194.  
  195. //---------------------------------------------------------------------------
  196. Mesa* Lista_Mesa::Cobrar(int Numero_Mesa){
  197.  
  198. Mesa *Devolver= this->Primero;
  199. Mesa *Sig= Devolver->Siguiente;
  200.  
  201.  
  202. if (Devolver->Numero_Mesa == Numero_Mesa) {
  203.  
  204. this->Primero= Sig;
  205. Devolver->Siguiente= NULL;
  206.  
  207. return Devolver;
  208. }
  209.  
  210. while (Sig){
  211.  
  212.             if (Sig->Numero_Mesa == Numero_Mesa) {
  213.  
  214.             Devolver->Siguiente= Sig->Siguiente;
  215.             Sig->Siguiente= NULL;
  216.             return Sig;
  217.                   }
  218.  
  219. Devolver= Sig;
  220.  
  221. Sig= Sig->Siguiente;
  222. }
  223.  
  224. return Sig;
  225. }
  226. //---------------------------------------------------------------------------
  227. #pragma package(smart_init)


bien, esta clase, o lo que trate de definir, es una lista enlazada.

el problema radica cuando ejecuto el codigo Mesa* Cobrar(int Numero_Mesa); y luego trato crear una nueva mesa si es que no existe con bool Nueva_Mesa(int Numero, UnicodeString __Mozo); no lo hace. En simples palabras, luego de cobrar una mesa, no puedo crear una nueva

se que el codigo es algo largo de ver, pero tengo tiempo si es que lo hacen, el programa recien lo voy a presentar en julio para rendir y este es el unico problema que tengo.....


como dice el titulo es posible que la clase tenga un error, puede que sea en la implementacion propia del programa, pero es mejor si lo vamos viendo de a poco, yo hace 1 me y medio que estoy con este problema :S

saludos y gracias de antemano

Etiquetas: clase, int, posible, programa, string
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 04:49.