Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: tonilogar en 31 Mayo 2011, 12:58 pm



Título: [Solucionado] Insertar función en codigo
Publicado por: tonilogar en 31 Mayo 2011, 12:58 pm
Este es el código de error que aparece, cuando intento añadir una función al código.

K:\programacion\c++\pepeluis03\pepeluisFuente.cpp||In function 'int main()':|
K:\programacion\c++\pepeluis03\pepeluisFuente.cpp|13|error: 'EntraDatos' was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|

 
Función que quiero añadir:
Código
  1. void EntraDatos()
  2. {
  3.  
  4. //Variable de función
  5. string fichero;
  6.  
  7. do
  8. {
  9. cout << "entra datos";
  10. cout << endl<< endl;
  11. getline (cin,fichero);
  12.  
  13. }
  14. while (fichero.length()!=0);//Cuando fichero sea diferente a 0 sigue preguntando
  15.  
  16.  
  17. [color=navy]He creado la función por separado con el fichero header:[/color]
  18.  
  19. #include <iostream>
  20. #include <string>
  21. #include <fstream>
  22. using namespace std;
  23.  
  24. void EntraDatos();
  25.  
  26. [color=navy]Con el fichero de las funciones.[/color]#
  27.  
  28. include <iostream>
  29. #include <string>
  30. #include <fstream>
  31. #include <K:\programacion\c++\pepeluis03\pepeluis.h>
  32. using namespace std;
  33.  
  34. void EntraDatos()
  35. {
  36. //Variable de función
  37. string fichero;
  38.  
  39. do
  40. {
  41. cout << "entra datos";
  42. cout << endl<< endl;
  43. getline (cin,fichero);
  44.  
  45. }
  46. while (fichero.length()!=0);//Cuando fichero sea diferente a 0 sigue preguntando
  47.  
  48. [color=navy]Y el fichero con la función main:[/color]
  49.  
  50.  
  51. #include <iostream>
  52. #include <string>
  53. #include <fstream>
  54. using namespace std;
  55. #include <E:\usuaris\a.lopez.g\programacion\c++\pepeluis03\pepeluis.h>
  56.  
  57.  
  58.  
  59. int main()
  60. {
  61.  
  62. EntraDatos();
  63.  
  64.  
  65. cin.get();
  66. return 0;
  67. }
  68.  

De esta forma la función me funciona “valga la redundancia” correctamente.

Pero cuando la inserto en este código me sale el error antes comentado.


Fichero Header:
//pepeluis.h

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. string MenuPreguntas();
  7.  
  8. string ConversorImagenes();
  9.  
  10. string ImagenesTransformar();
  11.  
  12. void EntraDatos();
  13.  
  14. [color=navy]Fichero de funciones:
  15. //pepeluis.cpp[/color]
  16.  
  17. #include <iostream>
  18. #include <string>
  19. #include <fstream>
  20. using namespace std;
  21.  
  22. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  23. ///////////////////////////////////////////////////////////////////////////////////////////////
  24.  
  25. string MenuPreguntas()
  26. {
  27. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  28. string Elegir;
  29.  
  30.  
  31.    while (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="4" && Elegir!="5" && Elegir!="q") {
  32. cout << endl << endl;
  33.        cout << "-----TRIAR SOFTWAREA A UTILITZAR" << endl << endl;
  34.        cout << "1: Conversor d'imatges" << endl<< endl;
  35.        cout << "2: Crear, tallar mosaics" << endl<< endl;
  36.        cout << "3: Buscar, renombrar, copiar, esborrar, moure fitxers" << endl<< endl;
  37. cout << "4: Mapa de diferencies" << endl<< endl;
  38. cout << "5: Treballar amb canals" << endl<< endl;
  39. cout << "Q: Sortir de l'aplicacio" << endl<< endl;
  40.        cout << "Seleciona opcion :"<< endl<< endl;
  41.        cin >> Elegir;
  42.    if (Elegir == "Q") Elegir="q"; //Si la opcion elegida es Q(mayuscula) pasarla a q(minuscula).
  43.  
  44. else if (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="4" && Elegir!="5" && Elegir!="q") cout << endl << "-----LA SELECCIO ES ERRONEA";
  45. }
  46. cout<< endl;
  47. cout<< endl;
  48. return Elegir;
  49. }
  50.  
  51.  
  52.  
  53.  
  54. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  55. ///////////////////////////////////////////////////////////////////////////////////////////////
  56.  
  57. string ConversorImagenes()
  58. {
  59. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  60. string Elegir;
  61.  
  62.  
  63.    while (Elegir!="1" && Elegir!="2" && Elegir!="3"&&  Elegir!="a" && Elegir!="q") {
  64. cout << endl << endl;
  65. cout << "-----coversor .RF .TIF .JPG" << endl << endl;
  66.        cout << "-----TRIAR OPCIO" << endl << endl;
  67.        cout << "1: Seleccionar imatges" << endl<< endl;
  68.        cout << "2: Seleccionar llistat d'imatges" << endl<< endl;
  69. cout << "3: Seleccionar directori on es troben les imatges a transformar" << endl<< endl;
  70. cout << "A: Tornar al menu anterior" << endl<< endl;
  71. cout << "Q: Sortir de l'aplicacio" << endl<< endl;
  72.        cout << "Seleciona opcion :"<< endl<< endl;
  73.        cin >> Elegir;
  74.    if (Elegir == "Q") Elegir="q"; //Si la opcion elegida es Q(mayuscula) pasarla a q(minuscula).
  75. else if (Elegir == "A") Elegir="a"; //Si la opcion elegida es A(mayuscula) pasarla a a(minuscula).
  76. else if (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="a" && Elegir!="q") cout << endl << "-----LA SELECCIO ES ERRONEA";
  77. }
  78. cout<< endl;
  79. cout<< endl;
  80. return Elegir;
  81. }
  82.  
  83.  
  84.  
  85. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  86. ///////////////////////////////////////////////////////////////////////////////////////////////
  87. void EntraDatos()
  88. {
  89.  
  90.  
  91. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  92. string fichero;
  93.  
  94.  
  95. do
  96. {
  97. cout << "entra datos";
  98. cout << endl<< endl;
  99. getline (cin,fichero);
  100.  
  101. }
  102. while (fichero.length()!=0);
  103.  
  104. }
  105.  

Fichero de la función main:

pepeluisFuente.cpp

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. #include <K:\programacion\c++\pepeluis02\pepeluis.h>
  5. using namespace std;
  6. string VariableMenuPreguntas;
  7. string VariableConversorImagenes;
  8.  
  9.  
  10.  
  11. int main()
  12. {
  13. EntraDatos();
  14. VariableMenuPreguntas=MenuPreguntas();
  15.  
  16. if (VariableMenuPreguntas == "1") VariableConversorImagenes=ConversorImagenes();
  17. else if (VariableMenuPreguntas == "2") cout << "VariableMenuPreguntas 2";
  18. else if (VariableMenuPreguntas == "3") cout << "VariableMenuPreguntas 3";
  19. else if (VariableMenuPreguntas == "4") cout << "VariableMenuPreguntas 4";
  20. else if (VariableMenuPreguntas == "5") cout << "VariableMenuPreguntas 5";
  21.  
  22.  
  23.  
  24. if (VariableConversorImagenes == "1") cout << "VariableConversorImagenes 1";
  25. else if (VariableConversorImagenes == "2") cout << "VariableConversorImagenes 2";
  26. else if (VariableConversorImagenes == "3") cout << "VariableConversorImagenes 3";
  27. else if (VariableConversorImagenes == "4") cout << "VariableConversorImagenes 4";
  28. else if (VariableConversorImagenes == "5") cout << "VariableConversorImagenes 5";
  29. else if (VariableConversorImagenes == "a") cout << "VariableConversorImagenes a";
  30.  
  31.  
  32. return 0;
  33.  
  34. }
  35.  

He probado mil triquiñuelas y no se que es lo que pasa, según el error la función no está declarada ¿norrrrr?

Un saludo y gracias por vuestro tiempo.


Título: Re: Insertar función en codigo
Publicado por: Queta en 31 Mayo 2011, 14:21 pm
Antes de todo, veo que tienes los archivos .cpp y .h en diferentes carpetas y cosas por el estilo; sería bueno que los pusieras todos en una misma, así no tendrías que entrar toda la ruta y bueno, lógicamente, es un tema de organización y rapidez.

Tu error es simple: en el código principal incluyes el archivo de cabecera entre los signos <> y lo debes hacer entre comillas dobles (http://en.wikipedia.org/wiki/Header_file (http://en.wikipedia.org/wiki/Header_file)). Y ya como plus extra, no hace falta incluir las librerías en esta cabecera, solamente en los .cpp.


Título: Re: Insertar función en codigo
Publicado por: tonilogar en 31 Mayo 2011, 16:25 pm
Gracias Queta, esta noche pruebo y comento.

Un saludo.


Título: Re: Insertar función en codigo
Publicado por: tonilogar en 2 Junio 2011, 00:01 am
Como decía Queta los includes al fichero de cabecera y al fichero de las definiciones de función, estaban mal.

A parte que algún que otro despropósito del código.

Aquí dejo el código con la funciona en su sitio.


Fichero header:
#ifndef PROYECTOBASE_HPP_INCLUDED//Codigo del editor code::blocks
#define PROYECTOBASE_HPP_INCLUDED//Codigo del editor code::blocks

//Declaracion de funciones
Código
  1. string MenuPreguntas();
  2.  
  3. string ConversorImagenes();
  4.  
  5. void EntraDatos();
  6.  
  7. #endif // PROYECTOBASE_HPP_INCLUDED//Codigo del editor code::blocks
  8.  

Fichero definición de funciones
Código
  1. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  2. ///////////////////////////////////////////////////////////////////////////////////////////////
  3.  
  4. string MenuPreguntas()
  5. {
  6. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  7. string Elegir;
  8.  
  9.  
  10.    while (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="4" && Elegir!="5" && Elegir!="q") {
  11. cout << endl << endl;
  12.        cout << "-----TRIAR SOFTWAREA A UTILITZAR" << endl << endl;
  13.        cout << "1: Conversor d'imatges" << endl<< endl;
  14.        cout << "2: Crear, tallar mosaics" << endl<< endl;
  15.        cout << "3: Buscar, renombrar, copiar, esborrar, moure fitxers" << endl<< endl;
  16. cout << "4: Mapa de diferencies" << endl<< endl;
  17. cout << "5: Treballar amb canals" << endl<< endl;
  18. cout << "Q: Sortir de l'aplicacio" << endl<< endl;
  19.        cout << "Seleciona opcion :"<< endl<< endl;
  20.        cin >> Elegir;
  21.    if (Elegir == "Q") Elegir="q"; //Si la opcion elegida es Q(mayuscula) pasarla a q(minuscula).
  22.  
  23. else if (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="4" && Elegir!="5" && Elegir!="q") cout << endl << "-----LA SELECCIO ES ERRONEA";
  24. }
  25. cout<< endl;
  26. cout<< endl;
  27. return Elegir;
  28. }
  29.  
  30. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  31. ///////////////////////////////////////////////////////////////////////////////////////////////
  32.  
  33. string ConversorImagenes()
  34. {
  35. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  36. string Elegir;
  37.  
  38.  
  39.    while (Elegir!="1" && Elegir!="2" && Elegir!="3"&&  Elegir!="a" && Elegir!="q") {
  40. cout << endl << endl;
  41. cout << "-----coversor .RF .TIF .JPG" << endl << endl;
  42.        cout << "-----TRIAR OPCIO" << endl << endl;
  43.        cout << "1: Seleccionar imatges" << endl<< endl;
  44.        cout << "2: Seleccionar llistat d'imatges" << endl<< endl;
  45. cout << "3: Seleccionar directori on es troben les imatges a transformar" << endl<< endl;
  46. cout << "A: Tornar al menu anterior" << endl<< endl;
  47. cout << "Q: Sortir de l'aplicacio" << endl<< endl;
  48.        cout << "Seleciona opcion :"<< endl<< endl;
  49.        cin >> Elegir;
  50.    if (Elegir == "Q") Elegir="q"; //Si la opcion elegida es Q(mayuscula) pasarla a q(minuscula).
  51. else if (Elegir == "A") Elegir="a"; //Si la opcion elegida es A(mayuscula) pasarla a a(minuscula).
  52. else if (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="a" && Elegir!="q") cout << endl << "-----LA SELECCIO ES ERRONEA";
  53. }
  54. cout<< endl;
  55. cout<< endl;
  56. return Elegir;
  57. }
  58.  
  59.  
  60.  
  61. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  62. ///////////////////////////////////////////////////////////////////////////////////////////////
  63. void EntraDatos()
  64. {
  65.  
  66.  
  67. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  68. string fichero;
  69.  
  70.  
  71. do
  72. {
  73. cout << "entra datos";
  74. cout << endl<< endl;
  75. getline (cin,fichero);
  76.  
  77. }
  78. while (fichero.length()!=0);
  79. cout << endl<< endl;
  80. cout << fichero;
  81. }
  82.  

Fichero main
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5. #include "ProyectoBase.hpp"//Fichero header
  6. #include "ProyectoBase.cpp" //Fichero de funciones
  7.  
  8. //Variables
  9. string VariableMenuPreguntas;
  10. string VariableConversorImagenes;
  11.  
  12. int main()
  13. {
  14.    VariableMenuPreguntas=MenuPreguntas();
  15.  
  16. if (VariableMenuPreguntas == "1") VariableConversorImagenes=ConversorImagenes();
  17. else if (VariableMenuPreguntas == "2") cout << "VariableMenuPreguntas 2";
  18. else if (VariableMenuPreguntas == "3") cout << "VariableMenuPreguntas 3";
  19. else if (VariableMenuPreguntas == "4") cout << "VariableMenuPreguntas 4";
  20. else if (VariableMenuPreguntas == "5") cout << "VariableMenuPreguntas 5";
  21.  
  22. if (VariableConversorImagenes == "1") EntraDatos();
  23. else if (VariableConversorImagenes == "2") cout << "VariableConversorImagenes 2";
  24. else if (VariableConversorImagenes == "3") cout << "VariableConversorImagenes 3";
  25. else if (VariableConversorImagenes == "4") cout << "VariableConversorImagenes 4";
  26. else if (VariableConversorImagenes == "5") cout << "VariableConversorImagenes 5";
  27.  
  28.    cin.get();
  29.    return 0;
  30.  
Y ahora a seguir con el programática.

Gracias por vuestro tiempo y ayuda.



Título: Re: Insertar función en codigo
Publicado por: tonilogar en 3 Junio 2011, 19:21 pm
Pues de nuevo con el getline.

La ultima función "void ImagenEntrada();".

Lo único que hace es pedir que entre datos y cuando tecleo return  sale del while.
Probando en un fichero separado va perfecto.
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. string fichero;
  9.  
  10.  
  11. do
  12. {
  13. cout << "entra datos";
  14. cout << endl<< endl;
  15. getline (cin,fichero);
  16.  
  17. }
  18. while (fichero.length()!=0);
  19.  
  20.  
  21. cin.get();
  22. return 0;
  23. }
  24.  

Pero a la que lo adjunto en un fichero con mas código.

Cuando entro el primer dato me echa del programa.

Por lo que leído el buffer del cin se queda con algún dato, y tengo que borrar el buffer.
¿me equivoco?

Lo he intentado con flush, ignore, cleaner etc pero no logro dar con el código correcto.

Estoy equivocado y no tiene que ver el buffer de cin.

Aquí dejo el código.


Fichero header:
Código
  1. #ifndef PROYECTOBASE_HPP_INCLUDED//Codigo del editor code::blocks
  2. #define PROYECTOBASE_HPP_INCLUDED//Codigo del editor code::blocks
  3.  
  4. //Declaracion de funciones
  5.  
  6. string MenuPreguntas();
  7.  
  8. string ConversorImagenes();
  9.  
  10. void EntraDatos();
  11.  
  12. #endif // PROYECTOBASE_HPP_INCLUDED//Codigo del editor code::blocks
  13.  

Fichero definición de funciones
Código
  1. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  2. ///////////////////////////////////////////////////////////////////////////////////////////////
  3.  
  4. string MenuPreguntas()
  5. {
  6. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  7. string Elegir;
  8.  
  9.  
  10.    while (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="4" && Elegir!="5" && Elegir!="q") {
  11.      cout << endl << endl;
  12.        cout << "-----TRIAR SOFTWAREA A UTILITZAR" << endl << endl;
  13.        cout << "1: Conversor d'imatges" << endl<< endl;
  14.        cout << "2: Crear, tallar mosaics" << endl<< endl;
  15.        cout << "3: Buscar, renombrar, copiar, esborrar, moure fitxers" << endl<< endl;
  16.      cout << "4: Mapa de diferencies" << endl<< endl;
  17.      cout << "5: Treballar amb canals" << endl<< endl;
  18.      cout << "Q: Sortir de l'aplicacio" << endl<< endl;
  19.        cout << "Seleciona opcion :"<< endl<< endl;
  20.        cin >> Elegir;
  21.       if (Elegir == "Q") Elegir="q"; //Si la opcion elegida es Q(mayuscula) pasarla a q(minuscula).
  22.  
  23.      else if (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="4" && Elegir!="5" && Elegir!="q") cout << endl << "-----LA SELECCIO ES ERRONEA";
  24. }
  25.   cout<< endl;
  26.   cout<< endl;
  27.   return Elegir;
  28. }
  29.  
  30. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  31. ///////////////////////////////////////////////////////////////////////////////////////////////
  32.  
  33. string ConversorImagenes()
  34. {
  35. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  36. string Elegir;
  37.  
  38.  
  39.    while (Elegir!="1" && Elegir!="2" && Elegir!="3"&&  Elegir!="a" && Elegir!="q") {
  40.      cout << endl << endl;
  41.      cout << "-----coversor .RF .TIF .JPG" << endl << endl;
  42.        cout << "-----TRIAR OPCIO" << endl << endl;
  43.        cout << "1: Seleccionar imatges" << endl<< endl;
  44.        cout << "2: Seleccionar llistat d'imatges" << endl<< endl;
  45.      cout << "3: Seleccionar directori on es troben les imatges a transformar" << endl<< endl;
  46.      cout << "A: Tornar al menu anterior" << endl<< endl;
  47.      cout << "Q: Sortir de l'aplicacio" << endl<< endl;
  48.        cout << "Seleciona opcion :"<< endl<< endl;
  49.        cin >> Elegir;
  50.       if (Elegir == "Q") Elegir="q"; //Si la opcion elegida es Q(mayuscula) pasarla a q(minuscula).
  51.      else if (Elegir == "A") Elegir="a"; //Si la opcion elegida es A(mayuscula) pasarla a a(minuscula).
  52.      else if (Elegir!="1" && Elegir!="2" && Elegir!="3" && Elegir!="a" && Elegir!="q") cout << endl << "-----LA SELECCIO ES ERRONEA";
  53. }
  54.   cout<< endl;
  55.   cout<< endl;
  56.   return Elegir;
  57. }
  58.  
  59.  
  60.  
  61. //CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  62. ///////////////////////////////////////////////////////////////////////////////////////////////
  63. void EntraDatos()
  64. {
  65.  
  66.  
  67. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  68. string fichero;
  69.  
  70.  
  71. do
  72. {
  73. cout << "entra datos";
  74. cout << endl<< endl;
  75. getline (cin,fichero);
  76.  
  77. }
  78. while (fichero.length()!=0);
  79. cout << endl<< endl;
  80. cout << fichero;
  81. }
  82.  
Fichero main
Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5. #include "ProyectoBase.hpp"//Fichero header
  6. #include "ProyectoBase.cpp" //Fichero de funciones
  7.  
  8. //Variables
  9. string VariableMenuPreguntas;
  10. string VariableConversorImagenes;
  11.  
  12. int main()
  13. {
  14.    VariableMenuPreguntas=MenuPreguntas();
  15.  
  16. if (VariableMenuPreguntas == "1") VariableConversorImagenes=ConversorImagenes();
  17. else if (VariableMenuPreguntas == "2") cout << "VariableMenuPreguntas 2";
  18. else if (VariableMenuPreguntas == "3") cout << "VariableMenuPreguntas 3";
  19. else if (VariableMenuPreguntas == "4") cout << "VariableMenuPreguntas 4";
  20. else if (VariableMenuPreguntas == "5") cout << "VariableMenuPreguntas 5";
  21.  
  22. if (VariableConversorImagenes == "1") EntraDatos();
  23. else if (VariableConversorImagenes == "2") cout << "VariableConversorImagenes 2";
  24. else if (VariableConversorImagenes == "3") cout << "VariableConversorImagenes 3";
  25. else if (VariableConversorImagenes == "4") cout << "VariableConversorImagenes 4";
  26. else if (VariableConversorImagenes == "5") cout << "VariableConversorImagenes 5";
  27.  
  28.    cin.get();
  29.    return 0;
  30.  

Un saludo y gracias por vuestro tiempo.


Título: Re: Insertar función en codigo
Publicado por: tonilogar en 3 Junio 2011, 23:49 pm
Arreglado.
Mira que era sencillo.
Poco a poco

Código
  1. /CUERPO DE FUNCION/////////////////////////////////////////////////////////////////////////////
  2. ///////////////////////////////////////////////////////////////////////////////////////////////
  3. void ImagenEntrada()
  4. {
  5. std::cin.ignore();
  6.  
  7. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  8. string fichero;
  9.  
  10.  
  11. do
  12. {
  13. cout << "entra datos";
  14. cout << endl<< endl;
  15. getline (cin,fichero);
  16.  
  17. }
  18. while (fichero.length()!=0);
  19.  
  20. }
  21.  
Un saludo a todos