Programación General > C/C++
constructores c++
(1/1)
john994:
--- Código: C++ ---/*amigos el programa me da un error de que no hay un constructor adecuado porfa ayuda exactamente en la linea 28 */ #include<iostream>#include<string>using namespace std; const int M=50; // Tamaño del arreglo class MovieData{ char title[M]; //Titulo de la pelicila char director[M]; // Nombre del director int year; //Año de la pelicula int Running_time; //Tiempo en minutos MovieData(char t, char d, int y, int t2) //constructor { title[M] = t, director[M] = d, year = y, Running_time = t2; }public: void impimir_pelicula(MovieData,MovieData); void info_pelicula(MovieData&,MovieData&);}; int main() { MovieData miclase; MovieData movie1,movie2; miclase.impimir_pelicula( movie1, movie2); miclase.info_pelicula( movie1,movie2); system ("pause"); return 0;}void MovieData::info_pelicula(MovieData &m1,MovieData &m2){ cout<<"nn ******** PRIMERA PELICULA ********** n"; cout<<"n Ingrese el nombre de la pelicula:n"; cin.ignore(); cin.getline(m1.title,M); //lee un string (title) cout<<"n Ingrese el nombre del director:n"; cin.ignore(); cin.getline(m1.director,M); cout<<"nIngrese el año de emision de la pelicula:n"; cin>>m1.year; cout<<"nIngrese la duracion de la pelicula en minutos:n"; cin>>m1.Running_time; cout<<"nn ******** SEGUNDA PELICULA ********** n"; cout<<"n Ingrese el nombre de la pelicula:n"; cin.ignore(); cin.getline(m2.title,M); //lee un string (title) cout<<"n Ingrese el nombre del director:n"; cin.ignore(); cin.getline(m2.director,M); cout<<"nIngrese el año de emision de la pelicula:n"; cin>>m2.year; cout<<"nIngrese la duracion de la pelicula en minutos:n"; cin>>m2.Running_time; }void MovieData:: impimir_pelicula(MovieData m1,MovieData m2){ cout<<"nn ******** PRIMERA PELICULA ********** n"; cout<<" Nombre de la pelicula:"<<m1.title<<endl; cout<<"Nombre del director:"<<m1.director<<endl; cout<<"Año de emision de la pelicula:"<<m1.year<<endl; cout<<"Duracion de la pelicula en minutos:"<<m1.Running_time; cout<<"nn ******** SEGUNDA PELICULA ********** n"; cout<<" Nombre de la pelicula:"<<m2.title<<endl; cout<<"Nombre del director:"<<m2.director<<endl; cout<<"Año de emision de la pelicula:"<<m2.year<<endl; cout<<"Duracion de la pelicula en minutos:"<<m2.Running_time; }
ProfesorX:
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 :)
ssaammuu:
--- Código: C++ ---MovieData(char t, char d, int y, int t2) //constructor 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++ ---MovieData *miclase;MovieData *movie1, *movie2;
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++ --- void MovieData::impimir_pelicula(MovieData* m1,MovieData* m2){//recogemos datos de la pelicula uno//en tu caso t, d, y, t2m1=new MovieData(t, d, y, t2);//recogemos datos de la pelicula dosm2=new MovieData(t, d, y, t2);//...}
Otra cosa es que esto no está bien
--- Código: C++ --- MovieData(char t, char d, int y, int t2) //constructor { title[M] = t, director[M] = d, year = y, Running_time = t2; }
Creo que intentas hacer esto:
--- Código: C++ --- MovieData(char* t, char* d, int y, int t2) //constructor { title = t; director = d; year = y; Running_time = t2; }
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.
Navegación
Ir a la versión completa