C/Visual C - Pasar objeto como parametro en un constructor de otra clase

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Miguel Andres (5 intervenciones) el 24/04/2020 07:23:48
Hola, estoy aprendiendo un poco de c++, ya en el pasado he trabajado con poo en java, lo que estoy tratando de hacer es pasar una referencia a un objeto a como parametro de una clase b, pero la sintaxis que uso normalmente en java aqui me salta una excepcion, gracias de antemano
Este es el error:
hello.c: In constructor 'Posicion::Posicion(Coordenadas)':
hello.c:38:26: error: no matching function for call to 'Coordenadas::Coordenadas
()'
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Rodrigo (119 intervenciones) el 24/04/2020 07:35:25
Manda la definicion de la funcion (solo la linea donde se definen los datos), como estas invocando la funcion, y la definicion de los objetos que estas usando. Con estos 3 elementos es mas facil ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Miguel Andres (5 intervenciones) el 24/04/2020 07:37:57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Coordenadas{
	double x;
	double y;
	public:
		Coordenadas(double x, double y, int type){
			if(type==2){
				Coordenadas::x = x*cos((y*PI)/180);
				Coordenadas::y = y*sin((y*PI)/180);
			}else if(type==1){
				Coordenadas::x = x;
				Coordenadas::y = y;
			}
		}
 
		getX(){
			return Coordenadas::x;
		}
		getY(){
			return Coordenadas::y;
		}
};
 
class Posicion{
 
	string id;
	Coordenadas c;
	int hh;
	int mm;
 
 
	public:
		Posicion(string id, Coordenadas & c, int hh, int mm){
			Posicion::id = id;
			Posicion::c = c;
			Posicion::hh = hh;
			Posicion::mm = mm;
		}
 
		string getId(){
			return Posicion::id;
		}
 
		Coordenadas getC(){
			return Posicion::c;
		}
 
		int getHh(){
			return Posicion::hh;
		}
 
		int getMm(){
			return Posicion::mm;
		}
 
 
};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Rodrigo (119 intervenciones) el 24/04/2020 07:42:43
Falta la invocacion, el uso de estas clases.
El error te esta indicando que te falta el constructor por default en la clase Coordenadas, el que no tienes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Miguel Andres (5 intervenciones) el 24/04/2020 07:46:52
Aun no la he hecho pero seria algo como esto en el caso de java:
1
2
Coordenadas c = new Coordenadas(1,3,5);
Posicion obj = new Posicion("i1",c,3,55);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Rodrigo (119 intervenciones) el 24/04/2020 07:52:53
Apostaria que si agregas estas lineas a la clase Coordenadas, el problema especifico se va:

public: Coordenadas() {}

Pero no es la mejor solucion.

Mejor agregar un constructor de copia y usarlo en el constructor de la otra clase.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Miguel Andres (5 intervenciones) el 24/04/2020 07:55:09
Ok si se soluciono, pero cual es la razon de esto? que en el constructor de Posicion no estoy pasandole los atributos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pasar objeto como parametro en un constructor de otra clase

Publicado por Rodrigo (119 intervenciones) el 24/04/2020 09:13:12
Antes del comienzo de la llave inicial del codigo del constructor de Posicion todos los objetos que son parte de el tienen que ser construidos.
Por esto se construye un objeto coordenadas.

Puedes construirlo usando el constructor de copia (que no tienes, pero si lo tuvieras), haciendo algo como

1
2
3
4
public:
   Posicion(string id, Coordenadas & c2, int hh, int mm) : c(c2) {
     // y no copiarlo aqui
   }

Si no defines un constructor, el compilador te regala el constructor por defecto, pero si agregas uno, como lo hiciste, el compilador ya no te regala nada, porque eres millonario de constructores y al tener 1 hace entender al compilador que es asi como construiras objetos. No es asi como lo usaste posteriomente, de aqui que el compilador te reclame la no presencia del constructor por default.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar