Programación General > C/C++

 [C++]Poblema con constructor

(1/1)

kmanus:
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 ---class Usuario {     private:         string nombre;         Lista<string>* amigos;         Lista<string>* intereses;         Pila<string>* actividadesRecientes;     public:         Usuario(string nombreusuario){            nombre =  nombreusuario;            amigos = new Lista<string>;            intereses = new Lista<string>;            actividadesRecientes = new Pila<string>;        } 
y el llamado problematico viene de aca:


--- Código: Text ---void agregarUsuario(string nombre) {              Usuario nuevoUsuario(nombre);             if (!(this->usuarios->Esta(nuevoUsuario)))             {                 [COLOR="Blue"]this->usuarios->agregar(nuevoUsuario);[/COLOR]              }             else                this->consola->getSalida()<< "El usuario "<<nombre<<" ya existe."<<endl;             return;        } 
Luego cuando quiere crear un nodo miren:


--- Código: Text ---void insertar(T dato, Nodo<T>* anterior, Nodo<T>* siguiente) {            /* crea el nodo */            [COLOR="red"]Nodo<T>* nuevo = new Nodo<T>(dato);[/COLOR] [COLOR="red"]// EL ERROR ESTA ACA, AHORA MUESTRO EL                 // CONSTRUCTOR DEL NODO[/COLOR]            nuevo->setAnterior(anterior);            nuevo->setSiguiente(siguiente);            /* actualiza los nodos anterior y siguiente */            if (anterior != NULL) {                anterior->setSiguiente(nuevo);            } else {                /* actualiza el primero en caso de insertar al comienzo */                this->getLista()->setPrimero(nuevo);            }            if (siguiente != NULL) {                siguiente->setAnterior(nuevo);            } else {                /* actualiza el último en caso de insertar al final */                this->getLista()->setUltimo(nuevo);            }            /* se queda en la posición que insertó */            this->setActual(nuevo);        }  
NODO Y CONSTRUCTOR:


--- Código: Text ---template<class T> class Nodo {    private:        /* elemento almacenado */        T dato;        /* puntero al siguiente nodo */        Nodo<T>* siguiente;        /* puntero al anterior nodo */        Nodo<T>* anterior;      public:                [COLOR="red"] Nodo(T dato) {[/COLOR] // Esta linea llama a Usuario::Usuario()            this->setDato(dato);            this->setSiguiente(NULL);            this->setAnterior(NULL);        }  Desde ya muchas gracias, espero q alguien entienda cual es el problema

Amilius:
Claro que existe, y si no quieres que sea llamado pues pasa el objeto por referencia y no por valor.


--- Código: C++ ---     Nodo(const T& dato) : dato(dato), siguiente(0), anterior(0)    {    }  
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa