• Miércoles 6 de Noviembre de 2024, 12:26

Autor Tema:  porque me da este fallo ?  (Leído 1371 veces)

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
porque me da este fallo ?
« en: Jueves 6 de Noviembre de 2008, 00:25 »
0
Código: Text
  1.  
  2. Hola,si yo tengo esta clase:
  3.  
  4. class Medico{
  5.  
  6.            private:
  7.                     string nombreApellidos;
  8.            public:
  9.                    Medico();
  10.                    Medico(const Medico &m);
  11.                    ...etc...etc
  12.  
  13.  
  14.  
  15. };
  16. #endif
  17.  
  18.  

y en la implementacion,es decir en el Medico.cc tengo lo siguiente:
Código: Text
  1.  
  2. Medico::Medico(string nombreAp)
  3. :nombreApellidos(nombreAp)
  4. {  }
  5.  
  6. Medico::Medico(const Medico &m)
  7. :nombreApellidos(m.nombreAp)  //aqui me da el error...y no se porque
  8.  
  9. {  //aqui pongo el codigo}
  10.  
  11.  
  12.  

donde me da el error no se si tengo que poner m.nombreApellidos,pero no se porque?

Me podeis ayudar

daltomi

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: porque me da este fallo ?
« Respuesta #1 en: Jueves 6 de Noviembre de 2008, 03:39 »
0
Buenas.
Estas accediendo a un miembro privado de la clase en: nombreApellidos(m.nombreApellidos). Las posibles soluciones seria implementar metodos get/set y funciones miembros friends.

Solo un ejemplo.

Código: Text
  1.  
  2. #ifndef __MEDICO_HPP__
  3. #define __MEDICO_HPP__
  4. #include <iostream>
  5.  
  6. using std::string;
  7.  
  8. class CMedico
  9. {
  10.     public:
  11.         CMedico();
  12.         void set(const string&);
  13.         const string& get()const ;
  14.  
  15.         friend void amigos(CMedico&, const CMedico&);
  16.     private:    
  17.         string nombreApellido;
  18. };
  19. #endif
  20.  
  21.  

Código: Text
  1.  
  2.  
  3. #include "medico.hpp"
  4.  
  5. CMedico::CMedico() {};
  6.  
  7. void CMedico::set(const string& str)
  8. {
  9.     nombreApellido = str;
  10. }
  11.  
  12. const string& CMedico::get() const
  13. {
  14.     return nombreApellido;
  15. }
  16.  
  17. void amigos(CMedico& destino, const CMedico& origen)
  18. {
  19.     destino.nombreApellido = origen.nombreApellido;
  20. }
  21.  
  22.  
  23.  

Código: Text
  1.  
  2.  
  3. /*Linux, g++ v4.1.2*/
  4. #include <iostream>
  5. #include "medico.hpp"
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     CMedico md1;
  12.     md1.set("abcde");
  13.  
  14.     CMedico md2;
  15.     md2.set(md1.get() );
  16.  
  17.     cout << "con metodos md2 es:" << md2.get() << " siendo ";
  18.     cout << "md1: " << md1.get() << "n";
  19.  
  20.     md1.set("fghij");
  21.    
  22.     amigos(md2,md1);
  23.    
  24.     cout << "llamando a amigos() md2  es:" << md2.get() << " siendo ";
  25.     cout << "md1: " << md1.get() << "n";
  26. }
  27.  
  28.  
Ya por último podrias contemplar la implementación de sobrecarga de operadores.
Saludos.

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: porque me da este fallo ?
« Respuesta #2 en: Jueves 6 de Noviembre de 2008, 09:00 »
0
Yo solo decía que os fijarais en la lista de inicialización,esa clase tengo más metodos realizados como getNombreApellidos...etc..etc pero no se porque en el constructor copia cuando hago :nombreApellidos(m.nombreAp) me da error,,,era por si alguien lo sabia

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: porque me da este fallo ?
« Respuesta #3 en: Jueves 6 de Noviembre de 2008, 09:13 »
0
Cita de: "pacorubio77"
Yo solo decía que os fijarais en la lista de inicialización,esa clase tengo más metodos realizados como getNombreApellidos...etc..etc pero no se porque en el constructor copia cuando hago :nombreApellidos(m.nombreAp) me da error,,,era por si alguien lo sabia

La razon es muy obvia: no existe ningun miembro de la clase Medico que sea nombreAp.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

pacorubio77

  • Miembro MUY activo
  • ***
  • Mensajes: 207
    • Ver Perfil
Re: porque me da este fallo ?
« Respuesta #4 en: Jueves 6 de Noviembre de 2008, 10:00 »
0
hola,me parece que te he entendido,es decir que deberia poner en el primer constructor
:nombreApellidos(nombreAp)

y en el segundo constructor :nombreApellidos(m.nombreApellidos) o en el primero constructor,tambien debería cambiarlo?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: porque me da este fallo ?
« Respuesta #5 en: Jueves 6 de Noviembre de 2008, 10:45 »
0
Pensa y proba, esto es muy pero muy simple.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.