• Viernes 8 de Noviembre de 2024, 16:33

Autor Tema:  constructores c++  (Leído 1167 veces)

john994

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
constructores c++
« en: Martes 10 de Mayo de 2011, 23:05 »
0
Código: C++
  1. /*amigos el programa me da un error de que no hay un constructor adecuado porfa ayuda exactamente en la linea 28 */
  2.  
  3. #include<iostream>
  4. #include<string>
  5. using namespace std;
  6.  
  7. const int M=50;    // Tamaño del arreglo
  8.  
  9. class MovieData{
  10.     char title[M]; //Titulo de la pelicila
  11.     char director[M]; // Nombre del director
  12.     int year; //Año de la pelicula
  13.     int Running_time;  //Tiempo en minutos
  14.      MovieData(char t, char d, int y, int t2) //constructor
  15.     {
  16.         title[M] = t,
  17.         director[M] = d,
  18.         year = y,
  19.         Running_time = t2;
  20.      }
  21. public:
  22.     void impimir_pelicula(MovieData,MovieData);
  23.     void info_pelicula(MovieData&,MovieData&);
  24. };
  25.  
  26. int main()
  27. {
  28.     MovieData miclase;
  29.     MovieData movie1,movie2;
  30.     miclase.impimir_pelicula( movie1, movie2);
  31.     miclase.info_pelicula( movie1,movie2);
  32.     system ("pause");
  33.     return 0;
  34. }
  35. void MovieData::info_pelicula(MovieData &m1,MovieData &m2){
  36.     cout<<"nn ******** PRIMERA PELICULA ********** n";
  37.     cout<<"n Ingrese el nombre de la pelicula:n";
  38.     cin.ignore();
  39.     cin.getline(m1.title,M);  //lee un string (title)
  40.     cout<<"n Ingrese el nombre del director:n";
  41.     cin.ignore();
  42.     cin.getline(m1.director,M);
  43.     cout<<"nIngrese el año de emision de la pelicula:n";
  44.     cin>>m1.year;
  45.     cout<<"nIngrese la duracion de la pelicula en minutos:n";
  46.     cin>>m1.Running_time;
  47.     cout<<"nn ******** SEGUNDA PELICULA ********** n";
  48.     cout<<"n Ingrese el nombre de la pelicula:n";
  49.     cin.ignore();
  50.     cin.getline(m2.title,M);  //lee un string (title)
  51.     cout<<"n Ingrese el nombre del director:n";
  52.     cin.ignore();
  53.     cin.getline(m2.director,M);
  54.     cout<<"nIngrese el año de emision de la pelicula:n";
  55.     cin>>m2.year;
  56.     cout<<"nIngrese la duracion de la pelicula en minutos:n";
  57.     cin>>m2.Running_time;
  58.  
  59.  
  60.  
  61.  
  62. }
  63. void MovieData:: impimir_pelicula(MovieData m1,MovieData m2){
  64.     cout<<"nn ******** PRIMERA PELICULA ********** n";
  65.     cout<<" Nombre de la pelicula:"<<m1.title<<endl;
  66.     cout<<"Nombre del director:"<<m1.director<<endl;
  67.     cout<<"Año de emision de la pelicula:"<<m1.year<<endl;
  68.     cout<<"Duracion de la pelicula en minutos:"<<m1.Running_time;
  69.     cout<<"nn ******** SEGUNDA PELICULA ********** n";
  70.     cout<<" Nombre de la pelicula:"<<m2.title<<endl;
  71.     cout<<"Nombre del director:"<<m2.director<<endl;
  72.     cout<<"Año de emision de la pelicula:"<<m2.year<<endl;
  73.     cout<<"Duracion de la pelicula en minutos:"<<m2.Running_time;
  74.     }
  75.  
  76.  

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: constructores c++
« Respuesta #1 en: Miércoles 11 de Mayo de 2011, 01:54 »
0
Coloca la defincion del constructor abajo de public, junto con  void impimir_pelicula(MovieData,MovieData) y void info_pelicula(MovieData&,MovieData&).

No se permiten metodos constructores de tipo privado, y si no pones explicitamente public, los metodos se toman como privados.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: constructores c++
« Respuesta #2 en: Miércoles 11 de Mayo de 2011, 02:07 »
0
Código: C++
  1. MovieData(char t, char d, int y, int t2) //constructor
  2.  
Primero que el constructor lo has hecho privado por lo que no puedes crear objetos de esta clase desde fuera de la clase. Lo segundo es que si te fijas, tu constructor toma 4 argumentos y tu intentas crear objetos sin argumentos.

Creo lo que deberías hacer es:
Código: C++
  1. MovieData *miclase;
  2. MovieData *movie1, *movie2;
  3.  

Desués en info_pelicula, crear un objeto nuevo con memoria dinámica y rellernarlo. Es decir info_pelicula sería algo así:
Código: C++
  1.  
  2. void MovieData::impimir_pelicula(MovieData* m1,MovieData* m2){
  3. //recogemos datos de la pelicula uno
  4. //en tu caso t, d, y, t2
  5. m1=new MovieData(t, d, y, t2);
  6. //recogemos datos de la pelicula dos
  7. m2=new MovieData(t, d, y, t2);
  8. //...
  9. }
  10.  
  11.  

Otra cosa es que esto no está bien
Código: C++
  1.  
  2.      MovieData(char t, char d, int y, int t2) //constructor
  3.     {
  4.         title[M] = t,
  5.         director[M] = d,
  6.         year = y,
  7.         Running_time = t2;
  8.      }
  9.  
  10.  

Creo que intentas hacer esto:
Código: C++
  1.  
  2.      MovieData(char* t, char* d, int y, int t2) //constructor
  3.     {
  4.         title = t;
  5.         director = d;
  6.         year = y;
  7.         Running_time = t2;
  8.      }
  9.  
  10.  

Una última cosa, lo siento, pero este código está muy mal, y valdría la pena empezar otra vez. Como estás usando C++ también te recomiendo que hagas uso de los string en vez de simularlos con arrays de chars.