Viernes 8 de Noviembre de 2024, 13:33
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
constructores c++
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: constructores c++ (Leído 1165 veces)
john994
Nuevo Miembro
Mensajes: 7
constructores c++
«
en:
Martes 10 de Mayo de 2011, 23:05 »
0
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
;
}
Tweet
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
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:
Re: constructores c++
«
Respuesta #2 en:
Miércoles 11 de Mayo de 2011, 02:07 »
0
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, t2
m1
=
new
MovieData
(
t, d, y, t2
)
;
//recogemos datos de la pelicula dos
m2
=
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.
Desarrollo de Juegos
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
constructores c++