Donde incluir librerías en clases

Iniciado por cNoob, 15 Diciembre 2017, 16:33 PM

0 Miembros y 1 Visitante están viendo este tema.

cNoob

Hola, he hecho un pequeño programa para acompañar mi pregunta

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    clase miClase(42);
    miClase.mostrar();
    return 0;
}


clase.h
Código (cpp) [Seleccionar]
#ifndef CLASE_H
#define CLASE_H
#include <iostream>

class clase
{
private:
    int numero;
public:
    clase (int n=0);
    void mostrar(void) const;
};

#endif // CLASE_H


clase.cpp
Código (cpp) [Seleccionar]
#include "clase.h"
#include <iostream>

clase::clase (int n) : numero(n){}

void clase::mostrar(void) const
{
    cout << numero << endl;
}


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   :-*
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

ivancea96

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)

BloodSharp

Cita de: cNoob en 15 Diciembre 2017, 16:33 PMpues 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...

Cita de: ivancea96 en 15 Diciembre 2017, 17:01 PMcout 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#



MAFUS

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.


cNoob

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?
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

ivancea96

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)