Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cNoob en 15 Diciembre 2017, 16:33 pm



Título: Donde incluir librerías en clases
Publicado por: cNoob en 15 Diciembre 2017, 16:33 pm
Hola, he hecho un pequeño programa para acompañar mi pregunta

main.cpp
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    clase miClase(42);
  8.    miClase.mostrar();
  9.    return 0;
  10. }
  11.  

clase.h
Código
  1. #ifndef CLASE_H
  2. #define CLASE_H
  3. #include <iostream>
  4.  
  5. class clase
  6. {
  7. private:
  8.    int numero;
  9. public:
  10.    clase (int n=0);
  11.    void mostrar(void) const;
  12. };
  13.  
  14. #endif // CLASE_H

clase.cpp
Código
  1. #include "clase.h"
  2. #include <iostream>
  3.  
  4. clase::clase (int n) : numero(n){}
  5.  
  6. void clase::mostrar(void) const
  7. {
  8.    cout << numero << endl;
  9. }
  10.  

pues bien, cuando compilo este proyecto codeblocks me dice que el "cout" de la linea 8 de clase.cpp "was not declared in this scope", y lo mismo para el endl. Supongo que he incluido iostream de forma equivocada, si alguien me puede decir como incluir las librerias de forma correcta...
Gracias   :-*


Título: Re: Donde incluir librerías en clases
Publicado por: ivancea96 en 15 Diciembre 2017, 17:01 pm
cout es del namespace std, tal como pones en el main: "using namespace std;".
Esa línea no la has puesto en clase.cpp (Sinó, tendrás que escribir std::cout y std::endl)


Título: Re: Donde incluir librerías en clases
Publicado por: BloodSharp en 15 Diciembre 2017, 17:03 pm
pues bien, cuando compilo este proyecto codeblocks me dice que el "cout" de la linea 8 de clase.cpp "was not declared in this scope", y lo mismo para el endl. Supongo que he incluido iostream de forma equivocada, si alguien me puede decir como incluir las librerias de forma correcta...

cout es del namespace std, tal como pones en el main: "using namespace std;".
Esa línea no la has puesto en clase.cpp (Sinó, tendrás que escribir std::cout y std::endl)

Iba a responder lo mismo que ivancea96, pero además aparte un detalle: el namespace std no es necesario en main.cpp


B#


Título: Re: Donde incluir librerías en clases
Publicado por: MAFUS en 16 Diciembre 2017, 13:01 pm
Y añado más: no incluyas librerías por incluir, es decir, si no vas a usar nada de ellas no escribas los incluyes, como en el caso del mail.cpp y clase.h.



Título: Re: Donde incluir librerías en clases
Publicado por: cNoob en 17 Diciembre 2017, 09:55 am
Pues parece bastante evidente ahora que lo decís, no se como pnsé en eso xD
Dos pequeñas dudas, si en el fichero header no uso ninguna librería, puedo añadirlas solo en el fichero .cpp donde tengo los métodos? Este programa no era el que me estaba dando el error como tal, era otro en el que también incluía la librería <fstream> y el ifstream me daba el mismo error, es por eso también entonces?


Título: Re: Donde incluir librerías en clases
Publicado por: ivancea96 en 17 Diciembre 2017, 13:31 pm
Prácticamente todas las clases y funciones de la librería estandar llevan el namespace std, así que es posible.

Las liberías deberías añadirlas solo en donde las necesites. Además, ten en cuenta que si haces un include en una header y luego haces include de ese header, vas a traerte todos los includes que haya hecho ese header. (Al fin y al cabo, un include no es más que reemplazar el #include con el contenido del archivo referenciado)