C/Visual C - Programa ha dejado de funcionar

 
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

Programa ha dejado de funcionar

Publicado por Miguel Andres (5 intervenciones) el 25/04/2020 09:11:40
Hola mi problema es el siguiente tengo un programa en c++ que lee un archivo con unas coordenadas y las muestra en consola usando diferentes clases, el problema es que al momento de leer el archivo y hacer un vector de objetos e invocar el metodo mostrar, no muestra nada o si lo invocas individualmente dice que ha dejado de funcionar, gracias de antemano
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include "iostream"
#include <math.h>
#include <vector>
#include <fstream>
#include <string>
 
#define PI 3.141592653589793
using namespace std;
 
class Coordenadas{
	double x;
	double y;
	public: Coordenadas(){};
	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(){};
	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;
		}
 
		void show(){
			cout<<Posicion::id<<"  "<<Posicion::c.getX()<<"  "<<Posicion::c.getY()<<"  "<<Posicion::hh<<"  "<<Posicion::mm<<"\n";
		}
 
 
};
 
class Tramo{
	string id;
	double distancia;
	double velocidad;
 
	public:
		Tramo(string id, double distancia, double velocidad){
			Tramo::id = id;
			Tramo::distancia = distancia;
			Tramo::velocidad = velocidad;
		}
 
		void mostrar(){
			cout<<Tramo::id<<"  "<<Tramo::distancia<<"  "<<Tramo::velocidad;
		}
};
 
class Apoyo{
	public:
		static void leerArchivo(vector <Posicion> array){
			ifstream fe("DatosPuntos.txt");
			string cadena;
 
			//DEFINIENDO VARIABLES PARA EL ARRAY
			string id;
			int type;
			double x;
			double y;
			int hh;
			int mm;
			vector<string> text;
 
			while (!fe.eof()) {
				fe >> cadena;
				text.push_back(cadena);
 
			}
			fe.close();
 
			for (int i = 0; i < text.size(); i+=6)
			{
 
				id = text[i];
				type = stoi(text[i+1]);
				x = stod(text[i+2]);
				y = stod(text[i+3]);
				hh = stoi(text[i+4]);
				mm = stoi(text[i+5]);
 
				Coordenadas c(type,x,y);
				Posicion p(id,c,hh,mm);
 
				array.push_back(p);
 
			}
		}
 
		static void mostrar(vector <Posicion> array){
 
			for (int i = 0; i < array.size(); ++i)
			{
				array[i].show();
			}
		}
};
 
int main(){
	vector <Posicion> array;
	Apoyo::leerArchivo(array);
        //aqui no muestra nada
	Apoyo::mostrar(array);
        //aqui ocurre el error
	array[0].show();
 
	return 0;
}
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

Programa ha dejado de funcionar

Publicado por Rodrigo (119 intervenciones) el 25/04/2020 12:34:01
Tal vez si pasas el array por referencia:

osea cambiar:
1
static void leerArchivo(vector <Posicion> array){

por
1
static void leerArchivo(vector <Posicion>& array){

No relacionado con el problema, pero relacionado con lo facil o no facil que resulta el leer el codigo que presentas:

Podrias cambiar tu codigo para que no use el nombre de la clase a cada rato si no es necesario.

Usa el nombre del campo directamente, por ejemplo, en vez de usar Posicion::c usa c directamente.
La excepcion es si tienes un parametro del metodo que tiene el mismo nombre. En ese caso en vez
de
1
NombreClase::variable = variable;
usa

1
this->variable = variable;

Define un tipo enumerado o constantes para el type, para que se pueda leer mejor

1
2
3
4
if( type == XXXX ) {
   ...
} else if( type == YYYY ) {
}

Donde XXXX e YYYY tienen los mismos valores, pero presentan al lector una manera mas facil de saber lo que estas haciendo, y tal vez errando.

PI ya esta defnida como constante en math.h, mira aqui

La clase Tramo no se usa, si es asi hasta el final, mejor borrala.
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