• Lunes 16 de Diciembre de 2024, 00:02

Autor Tema:  [C++]Poblema con constructor  (Leído 970 veces)

kmanus

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
[C++]Poblema con constructor
« en: Miércoles 27 de Octubre de 2010, 19:04 »
0
Saludos, soy nuevo en esta seccion del foro y ya vengo a pedir ayuda jeje tengo un problema con un tp q tengo q entregar en la facu. Sucede que me llama al costructor Usuaruio::Usuario() q no existe, pero no entiendo xq lo hace.


Código: Text
  1. class Usuario {
  2.  
  3.     private:
  4.  
  5.         string nombre;
  6.  
  7.         Lista<string>* amigos;
  8.  
  9.         Lista<string>* intereses;
  10.  
  11.         Pila<string>* actividadesRecientes;
  12.  
  13.     public:
  14.  
  15.         Usuario(string nombreusuario){
  16.             nombre =  nombreusuario;
  17.             amigos = new Lista<string>;
  18.             intereses = new Lista<string>;
  19.             actividadesRecientes = new Pila<string>;
  20.         }
  21.  

y el llamado problematico viene de aca:

Código: Text
  1. void agregarUsuario(string nombre) {
  2.  
  3.              Usuario nuevoUsuario(nombre);
  4.              if (!(this->usuarios->Esta(nuevoUsuario)))
  5.              {
  6.                  [COLOR="Blue"]this->usuarios->agregar(nuevoUsuario);[/COLOR]
  7.  
  8.              }
  9.              else
  10.                 this->consola->getSalida()<< "El usuario "<<nombre<<" ya existe."<<endl;
  11.              return;
  12.         }
  13.  

Luego cuando quiere crear un nodo miren:

Código: Text
  1. void insertar(T dato, Nodo<T>* anterior, Nodo<T>* siguiente) {
  2.             /* crea el nodo */
  3.             [COLOR="red"]Nodo<T>* nuevo = new Nodo<T>(dato);[/COLOR] [COLOR="red"]// EL ERROR ESTA ACA, AHORA MUESTRO EL
  4.                 // CONSTRUCTOR DEL NODO[/COLOR]
  5.             nuevo->setAnterior(anterior);
  6.             nuevo->setSiguiente(siguiente);
  7.             /* actualiza los nodos anterior y siguiente */
  8.             if (anterior != NULL) {
  9.                 anterior->setSiguiente(nuevo);
  10.             } else {
  11.                 /* actualiza el primero en caso de insertar al comienzo */
  12.                 this->getLista()->setPrimero(nuevo);
  13.             }
  14.             if (siguiente != NULL) {
  15.                 siguiente->setAnterior(nuevo);
  16.             } else {
  17.                 /* actualiza el último en caso de insertar al final */
  18.                 this->getLista()->setUltimo(nuevo);
  19.             }
  20.             /* se queda en la posición que insertó */
  21.             this->setActual(nuevo);
  22.         }
  23.  
  24.  

NODO Y CONSTRUCTOR:

Código: Text
  1. template<class T> class Nodo {
  2.     private:
  3.         /* elemento almacenado */
  4.         T dato;
  5.         /* puntero al siguiente nodo */
  6.         Nodo<T>* siguiente;
  7.         /* puntero al anterior nodo */
  8.         Nodo<T>* anterior;
  9.  
  10.  
  11.     public:
  12.        
  13.  
  14.        [COLOR="red"] Nodo(T dato) {[/COLOR] // Esta linea llama a Usuario::Usuario()
  15.             this->setDato(dato);
  16.             this->setSiguiente(NULL);
  17.             this->setAnterior(NULL);
  18.         }
  19.  
  20.  
Desde ya muchas gracias, espero q alguien entienda cual es el problema

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: [C++]Poblema con constructor
« Respuesta #1 en: Miércoles 27 de Octubre de 2010, 22:11 »
0
Claro que existe, y si no quieres que sea llamado pues pasa el objeto por referencia y no por valor.

Código: C++
  1.  
  2.     Nodo(const T& dato) : dato(dato), siguiente(0), anterior(0)
  3.     {
  4.     }
  5.  
  6.  

Además tienes que definir tu propio constructor copia y el operador de asignación para la clase Usuario. Siempre debes hacer esto cuando asignas/reservas memoria en tu constructor, o bien declararlos como privados sin definirlos para que el compilador te de error si tratas de usarlos por accidente.