C/Visual C - Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

 
Vista:
sin imagen de perfil

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 02/11/2015 13:27:45
Hola:

Tengo un problema al utilizar makefile con un programa en C++

A construir los archivos objeto de una clase ( clase.cpp y clase.h ) me da una serie de errores consistentes en que no reconoce las variables de tipo string.

La libreria string está cargada en el main. He probado a cargar la libreria string en la clase pero tampoco funciona.

La orden a makefile que he puesto es:

g++ -c clase.cpp clase.h -o clase.o

Si compilo con el main sin utilizar makefile funciona perfectamente ( g++ -o programa.exe main.cpp )

Gracias a todos y saludos
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 xve

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por xve (24 intervenciones) el 02/11/2015 17:59:41
Hola Rafa, exactamente que error te da??

Estaría bien que nos mostraras el código o lineas donde da el error.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 02/11/2015 18:20:52
Hola:

el error es que las variables de tipo string no son reconocidas.

No es un error de una sola líneas. Me salen varias pantalla de errores de esas que saca el compilador y todas apuntan a que las variables de tipo string no están definidas, no las reconoce.

Los archivos fuentes que tengo son:

principal.cpp

pregunta.cpp pregunta.h que contiene una clase

conjuntopreguntas.cpp conjuntopreguntas.h --otra clase

test.cpp test.h -- la otra clase

al generar los ficheros objetos de las clases es donde sale el error.

lo hago de la siguiente forma, dentro del makefile:

g++ -c pregunta.cpp pregunta.h -o pregunta.o


también he probado con g++ -c pregunta.cpp -o pregunta.o


Si lo genero el ejecutable con g++ -o ejecutable principal.cpp ningún problema, pero la práctica dice que hay que generarlo con makefile creando cada uno de los ficheros objeto y es lo que me falla, generar los fiicheros objeto de las clases. Como si no tuviera en cuenta que la libreria <string> esta puesta en el principal.

He probado a incluir la libreria string en la propia clase, pero tampoco.

gracias
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Tom (619 intervenciones) el 02/11/2015 19:19:37
Si compilas por separado, cada .cpp que lo necesite debe hacer el include de <string>.
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por aguml (272 intervenciones) el 02/11/2015 22:31:30
O cada .h depende diendo de si haces uso de el en el archivo de cabecera.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 03/11/2015 10:23:25
Hola:

He probado a incluir la libreria string en los .h y en los cpp de las clases.

Me salta la siguiente duda. ¿Debería de incluir los .h que contienen la definición de las clases en el programa principal en lugar de en las funciones de las clases ( clase.cpp)?

¿donde se tienen que incluir los .h ?

Estuve viendo la estructura que le da la librería Qt y los .h los colocaba en los .cpp con las funciones, pero vaya que eso lo haga la librería Qt y para el programa sin librería deban de ir en el fichero principal.

Gracias por vuestra colaboración
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por aguml (272 intervenciones) el 03/11/2015 14:52:21
Depende muy mucho del uso que le quieras dar. Varios casos:
1. Imagina que tu clase tiene un método "string getname ();".En este caso SÍ tiene que ir en el .h y si dicho .h lo incluyes al .cpp ya no tienes que añadir string.h al .cpp porque ya lo obtiene del de cabecera.
2. Imagina que el .h no necesita al string.h para nada. Entonces NO necesitas para nada incluir dicha librería en el archivo de cabecera.
En el caso de librerías estándar no hay problema por añadirla de mas porque están bien hechas y usan directivas para impedir que se redefinan pero es buena práctica no duplicarlas innecesariamente.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Tom (619 intervenciones) el 03/11/2015 16:42:11
Eso es "a gusto del consumidor" siempre que el consumidor tenga claro lo que hace falta :)

Un fichero .h (olvidemos la precompilación de cabeceras, no creo que nadie lo use) no es más que un trozo de código fuente que el preprocesador pega en el fichero que hace #include (fíjate que digo el preprocesador, no el compilador).

Así que generalmente todo acaba en un .cpp que es lo que compilas al fin y al cabo y da igual dónde pongas tus #include, siempre y cuando el compilador pueda acceder a la definición de los tipos y constantes (y en C++ muchos templates) en el momento en que los necesita (o sea, en el .cpp final la declaración será visible antes que la definición).

En definitiva dentro de un .cpp , es lo mismo:

1
2
3
4
5
6
7
/* Tipos en cabecera.h necesitan std::string */
/* cabecera.h _no_ incluye string */
#include <string>
#include "cabecera.h"
...
std::string my_string;
...

que:

1
2
3
4
5
6
7
/* Tipos en cabecera.h necesitan std::string */
/* y cabecera.h ya include string */
#include "cabecera.h"
 
...
std::string my_string;
...

Además, para facilitar las cosas y evitar futuros errores, generalmente "enmarcas" tus ficheros .h para que no se repita el código (la declaración de tipos, por ejemplo, daría un error si se duplica):

Fichero myClass.h:

1
2
3
4
5
6
#ifndef _MY_CLASS_H_
#define _MY_CLASS_H_
class MyClass {
...
}
#endif /* _MY_CLASS_H_ */

De esta forma puedes hacer #include "myClass.h" tantas veces como quieras, solamente se copiará su código la primera vez (cuando no está definido el símbolo _MY_CLASS_H_).

Todos los .h del compilador ya están "protegidos" de esta forma, así que si quieres poner #include <string> en todos tus .cpp y todos tus .h no pasará nada.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 03/11/2015 17:33:38
He puesto en los cpp de las clases todos los includes que necesitaba para que se pudiera generar el codigo objeto de forma que todos los cpp incluyen:

#include <iostream>
#include <string>

using namespace std;

#include "cabecera.h"

Entonces ahora si que puedo crear los fichderos objeto de cada una de las clases, ya que como los includes solo estaban en el programa principal, al crear los ficheros objetos entiendo que diera ese error ya subsanado.

Ahora intento crear el ejecutable con los ficheros objeto de la siguiente forma

g++ -o ejecutable.exe principal.o preguntas.o conjuntoprecuntas.o test.o



El error que me arroja ahora es:

definiciones múltiples en Pregunta::Pregunta() ... y así con todos los métodos de las clases.


Si no incluyo en el cpp los includes que te indicado arriba y el using namespace std, no se crea el fichero objeto, y si lo pongo me da el error que te indico

Te dejo el código de una clase para que lo veas.

Esta sería la definición de la clase.

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
#ifndef PREGUNTA_H
#define PREGUNTA_H
 
class Pregunta{
 
private:
 
	string pregunta;
	int num_res;
	int utilizados;
	string * respuesta;
 
public:
 
	Pregunta();
	Pregunta(int n);
 
 
 
	void SetPregunta(string p);
	string GetPregunta();
	int GetNumPreguntas();
	void SetRespuesta(string cadena);
	string GetRespuesta(int i);
 
 
 
};
 
#endif // PREGUNTA_H


Estos serían los métodos

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
#include <iostream>
#include <string>
 
using namespace std;
#include "../include/pregunta.h"
 
 
Pregunta::Pregunta(){
 
}
 
Pregunta::Pregunta(int n){
 
	num_res = n;
	utilizados = 0;
	respuesta = new string[num_res];
 
}
 
void Pregunta::SetPregunta(string p){
 
	pregunta = p;
 
}
 
string Pregunta::GetPregunta(){
 
	return pregunta;
 
}
 
int Pregunta::GetNumPreguntas(){
 
	return utilizados;
 
}
 
void Pregunta::SetRespuesta(string cadena){
 
	respuesta[utilizados] = cadena;
	utilizados++;
 
}
 
string Pregunta::GetRespuesta(int i){
 
	return respuesta[i];
 
}



Gracias y saludos.
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por aguml (272 intervenciones) el 03/11/2015 19:29:11
Pon lo del incluye del string.h debajo de esta linea:
#define PREGUNTA_H
Y quita lo del .cpp.

Con respecto al error que te da es porque se está redefiniendo más de una vez y no llego a ver porque porque tienes la clase protegida. Supongo que es porque no tienes string.h en el .h y considera que son tipos diferentes o yo que se jajaja. Prueba lo que te digo y me cuentas.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Tom (619 intervenciones) el 03/11/2015 20:15:52
Algo estás haciendo mal.
Pego varios ficheros, cuya compilación funciona correctamente. Hay muchos includes que sobran (como dice aguml no es bueno ponerlos donde no hacen falta, pero es un ejemplo para que veas que debería funcionar incluso así).

Compilo con:
g++ pregunta.cpp -c -o pregunta.o
g++ conjuntopreguntas.cpp -c -o conjuntopreguntas.o
g++ main.cpp -c -o main.o
g++ -o test main.o pregunta.o conjuntopreguntas.o

Fich. pregunta.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef _PREGUNTA_H_
#define _PREGUNTA_H_
 
class Pregunta{
private:
	string pregunta;
	int num_res;
	int utilizados;
	string * respuesta;
public:
	Pregunta();
	Pregunta(int n);
	void SetPregunta(string p);
	string GetPregunta();
	int GetNumPreguntas();
	void SetRespuesta(string cadena);
	string GetRespuesta(int i);
};
#endif

Fich pregunta.cpp
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
#include <iostream>
#include <string>
using namespace std;
#include "pregunta.h"
 
Pregunta::Pregunta(){
}
 
Pregunta::Pregunta(int n){
	num_res = n;
	utilizados = 0;
	respuesta = new string[num_res];
}
 
void Pregunta::SetPregunta(string p){
	pregunta = p;
}
 
string Pregunta::GetPregunta(){
	return pregunta;
}
 
int Pregunta::GetNumPreguntas(){
	return utilizados;
}
 
void Pregunta::SetRespuesta(string cadena){
	respuesta[utilizados] = cadena;
	utilizados++;
}
 
string Pregunta::GetRespuesta(int i){
	return respuesta[i];
}

Fich conjuntopreguntas.h
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef _CONJUNTO_PREGUNTAS_H_
#define _CONJUNTO_PREGUNTAS_H_
 
using namespace std;
#include "pregunta.h"
 
class ConjuntoPreguntas {
	Pregunta	*preguntas;
public:
	ConjuntoPreguntas();
};
 
#endif

Fich conjuntopreguntas.cpp
1
2
3
4
5
6
7
8
#include <string>
using namespace std;
#include "pregunta.h"
#include "conjuntopreguntas.h"
 
ConjuntoPreguntas::ConjuntoPreguntas() {
	preguntas = new Pregunta[2];
}

Fich main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
using namespace std;
 
#include "pregunta.h"
#include "conjuntopreguntas.h"
 
/* */
int main() {
	ConjuntoPreguntas	cpp;
}
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 03/11/2015 23:46:59
Seguro que los includes los estoy poniendo mal pero llevo ya para dos horas poniendo y quitando y no hay manera

uno a uno genero correctamente el .o , pero al crear el ejecutable a partir de los .o sigue dándome error.

Pego todo el código a ver si vosotros veis el error.

La clase pregunta es utilizada por la clase conjuntopreguntas y la clase test

La clase cojuntopreguntas es utilizada por la clase test


FICHERO PRINCIPAL pruebatest_gen.cpp

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
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
 
#include "pregunta.cpp"
#include "conjuntopreguntas.cpp"
#include "test.cpp"
 
 
 
int main(int argc, char * argv[]){
  if (argc!=3 && argc !=4){
      cout<<"Los parametros son:"<<endl;
      cout<<"1.Dime el nombre del fichero con las preguntas y posibles respuestas"<<endl;
      cout<<"2.El numero de preguntas que quieres en el test"<<endl;
      cout<<"3.-(Opcional) El nombre del fichero donde escribir el test"<<endl;
      return 0;
  }
 
  ifstream fin(argv[1]);
  if (!fin){
      cout<<"No puedo abrir el fichero "<<argv[1]<<endl;
      return 0;
  }
 
  ConjuntoPreguntas CP;
 
 // fin>>CP; CARGAMOS LAS PREGUNTAS
 
  string pregunta;
  int numero;
  string respuesta;
 
  while(fin){
 
    getline(fin, pregunta);
 
    if(pregunta.size() > 0){
 
      fin >> numero;
 
      Pregunta obj_pregunta(numero);
      obj_pregunta.SetPregunta(pregunta);
      fin.ignore();
 
      for(int i = 0; i < numero; i++){
 
        getline(fin, respuesta);
        obj_pregunta.SetRespuesta(respuesta);
 
      }
 
      CP.SetPregunta(obj_pregunta);
 
    }
 
  }
 
  fin.close();
 
 
 
  cout<<"Leidas las preguntas. Numero Total : "<<CP.Size()<<endl;
  int np=atoi(argv[2]);
 
  Test T(CP,np); // Se genera el test de forma aleatoria con el conjunto de preguntas
  cout<<"Generado el test..."<<endl;
  if (argc==3){
     // cout<<T<<endl;
  }
  else {
    ofstream fout(argv[3]);
    if (!fout){
	cout<<"No puedo crear el fichero "<<argv[3]<<endl;
	return 0;
    }
 
 
    //fout<<T;
 
//  muestra las preguntas de la clase test 
 
char r;
T.CargaPreguntas();
 
cout << "tamaño ....> " << T.Size() << endl << endl;
for (int i=0; i<T.Size(); i++){
 
  Pregunta examen (T.GetPregunta(i));
 
  cout << examen.GetPregunta()<< endl;
 
  for (int j=0; j<examen.GetNumPreguntas(); j++){
 
    cout << examen.GetRespuesta(j) << endl;
  }
 
  cout << endl << "Respuesta: ";
  cin >> r;
  fout << examen.GetPregunta() << endl;
  fout << r << endl;
  cout << endl;
}
 
fout.close();
cout << endl << endl;
 
    //fin de mi codigo
 
}
 
}



CABECERA CLASE PREGUNTA pregunta.h

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
#ifndef PREGUNTA_H
#define PREGUNTA_H
 
class Pregunta{
 
private:
 
	string pregunta;
	int num_res;
	int utilizados;
	string * respuesta;
 
public:
 
	Pregunta();
	Pregunta(int n);
 
 
 
	void SetPregunta(string p);
	string GetPregunta();
	int GetNumPreguntas();
	void SetRespuesta(string cadena);
	string GetRespuesta(int i);
 
 
 
};
 
#endif // PREGUNTA_H

MÉTODOS CLASE PREGUNTA pregunta.cpp

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
#include <iostream>
#include <string>
 
using namespace std;
#include "../include/pregunta.h"
 
 
Pregunta::Pregunta(){
 
}
 
Pregunta::Pregunta(int n){
 
	num_res = n;
	utilizados = 0;
	respuesta = new string[num_res];
 
}
 
void Pregunta::SetPregunta(string p){
 
	pregunta = p;
 
}
 
string Pregunta::GetPregunta(){
 
	return pregunta;
 
}
 
int Pregunta::GetNumPreguntas(){
 
	return utilizados;
 
}
 
void Pregunta::SetRespuesta(string cadena){
 
	respuesta[utilizados] = cadena;
	utilizados++;
 
}
 
string Pregunta::GetRespuesta(int i){
 
	return respuesta[i];
 
}



CABECERA CLASE CONJUNTOPREGUNTAS conjuntopreguntas.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef CONJUNTOPREGUNTAS_H
#define CONJUNTOPREGUNTAS_H
 
using namespace std;
#include "../include/pregunta.h"
 
class ConjuntoPreguntas{
 
private:
 
	int utilizados;
	Pregunta *conjunto;
 
public:
 
	ConjuntoPreguntas();
	void SetPregunta(Pregunta p);
	Pregunta GetObjeto(int i);
	int Size();
 
};
 
#endif  //  CONJUNTOPREGUNTAS_H

MÉTODOS CLASE CONJUNTOPREGUNTAS conjuntopreguntas.cpp

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
#include <string>
 
using namespace std;
 
#include "../include/conjuntopreguntas.h"
 
ConjuntoPreguntas::ConjuntoPreguntas(){
 
	utilizados = 0;
	conjunto = new Pregunta[2000];
 
}
 
void ConjuntoPreguntas::SetPregunta(Pregunta p){
 
	conjunto[utilizados] = p;
	utilizados++;
 
}
 
Pregunta ConjuntoPreguntas::GetObjeto(int i){
 
	return conjunto[i];
 
}
 
int ConjuntoPreguntas::Size(){
 
	return utilizados;
 
}


CABECERA CLASE TEST test.h

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
#ifndef TEST_H
#define TEST_H
 
#include "../include/conjuntopreguntas.h"
 
class Test {
 
private:
 
	int numPreg;
	int utilizados;
	Pregunta *pr;
	ConjuntoPreguntas cp;
 
public:
 
	Test(ConjuntoPreguntas c, int np);
	void SetPregunta (Pregunta p);
	Pregunta GetPregunta(int i);
	int Size();
	void CargaPreguntas();
 
 
};
 
 
 
#endif //  TEST_H


MÉTODOS CLASE TEST test.cpp

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
#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>
 
using namespace std;
 
#include "../include/test.h"
 
	Test::Test(ConjuntoPreguntas c, int np){
 
		cp = c;
		utilizados = 0;
		pr = new Pregunta[np];
		numPreg = np;
		cout << "N P : " << np << endl;
	}
 
	void Test::SetPregunta (Pregunta p){
 
		pr[utilizados] = p;
 
		utilizados++;
 
	}
 
	Pregunta Test::GetPregunta(int i){
 
		return pr[i];
	}
 
 
	int Test::Size(){
 
		return utilizados;
	}
 
	void Test::CargaPreguntas(){
 
 
	srand(time(NULL));
 
	for (int i=0; i< numPreg; i++){
 
		int aleatorio = rand()%(cp.Size()+1);
		Pregunta examen (cp.GetObjeto(aleatorio));
		SetPregunta(examen);
 
	}
 
	}
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por aguml (272 intervenciones) el 04/11/2015 00:13:01
No puedes hacer esto:
1
2
3
#include "pregunta.cpp"
#include "conjuntopreguntas.cpp"
#include "test.cpp"
Tienes que incluir los archivos de cabecera, no esos.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 04/11/2015 00:28:52
si, ya funciona... efectivamente he cambiado los cpp por los .h y ya ha funcionado correctamente.

Lo que no entiendo es entonces que los cpp no se han incluido en ningún momento el el programa principal. Los .h contienen la definición de las clases pero no los métodos, así que no veo en que momento se cargan los métodos de las clases ( los cpp).



Muchas gracias por tu inestimable ayuda.
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por aguml (272 intervenciones) el 04/11/2015 00:50:45
Conjuntopreguntas.cpp sobran estas lineas:
 #include <string>
 
En preguntas.cpp quita la siguiente línea y ponla debajo del define de preguntas.h:
 #include <string>

Por cierto, en vez de atoi podrías usar stringstream. Eso ya queda en lo que quieras usar.
Sobre que no añades los .cpp pues no se decirte, supongo que los vincula el ide que estas usando. Si das a project y buscas el manager veras todo lo que contiene y ahí seguramente andarán metidos todos.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 04/11/2015 09:33:54
Gracias por la revisión.

ya funciona perfectamente. Es el primer proyecto con archivos de este tipo y me he liado.

Respecto a usar stringstream en lugar de atoi no puedo ya que el fichero principal es un código base que no se puede modificar. El resto de ficheros deben de funcionar en ese código base. Lo único que he insertado en el código base es lo que se muestra entre los comentarios que indican código insertado.

El stringstrean lo he utilizado poco, solo para leer líneas de un fichero de texto que contenía los datos separados por un separdor (;) y asignar cada trozo de línea a una variable del tipo correspondiente a la información capturada.

Me puedes decir si es esa su utilidad principal, convertir tipos de datos, o tiene mas utilidades ?

De nuevo muchas gracias por tu ayuda.

Un saludo.
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por aguml (272 intervenciones) el 04/11/2015 11:14:09
stringstream se usa para manejar strings y una de esas utilidades es la conversión.
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

Makefile me da una serie de errores consistentes en que no reconoce las variables de tipo string

Publicado por Rafa (12 intervenciones) el 04/11/2015 11:24:04
Ok, gracias
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