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
Ir a la versión completa