C/Visual C - problema raro con #include

 
Vista:

problema raro con #include

Publicado por jack (1 intervención) el 04/01/2003 02:34:23
Os cuento... He realizado un programa bastante simple para una práctica de la facultad en C++.
He puesto el #include <iostream>. Pues bien, al compilar me da un error que viene a decir que la cout no está definido, y tampoco endl. En cambio, si pongo #include <iostream.h> todo funciona bien (aunque me da un warning que viene a decir que el iostream.h esta un poco anticuado). Lo curioso es que en otro programa(también bastante simple), en el mismo sistema operativo, con el mismo compilador, si me funciona el #include <iostream>. Esto solo me pasa en Linux (solo he podido probarlo en una distribucion hasta ahora), en Windows si funciona bien. ¿A que puede deberse?
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

RE:problema raro con #include

Publicado por Googol (255 intervenciones) el 04/01/2003 15:03:47
A los namespace, imagino.
En C++ existen los namespaces o espacios de nombres. La idea es aglutinar un conjunto de identificadores (constantes, variables, funciones, clases) dentro de un mismo "espacio" o entorno. Eso hace que para acceder a esos identificadores haya que preceder el acceso por el espacio de nombres al que pertenecen. Por ejemplo, tradicionalmente las funciones de OpenGL van precedidas por el prefijo GL, lo que intenta evitar que dentro del código de tu programa haya ya una función que "colisione" con la función de OpenGL. Un método alternativo sería meter todas las funciones de OpenGL en un namespace, pongamos OGL. Así para acceder a sus funciones habría que anteceder el identificador con él, por ejemplo OGL::setColor3f(...).
Los identificadores de la librería estandar de C++ (cout, endl, vector...) también están dentro de un namespace llamado "std". El método normal de utilizarlos debería ser, por ejemplo

std::cout << "Hola mundo"

Gracias a eso tu programa podría definir una función cout, una clase vector, o una variable endl sin colisionar con las estandar. El problema es que si no tienes esas colisiones, estar obligado a poner siempre "std::" es un poco rollo. Y precisamente por eso funciona el include de iostream o de iostream.h Los dos son iguales... salvo que iostream (sin .h) mete todo en el namespace std, y iostream.h no. Por tanto si incluyes iostream.h cout << "Hola mundo" funcionará, y con iostream (sin .h) no (falta el std::).
Otra solución es incluir iostream (sin .h) y luego añadir la línea "using namespace std" que le dice al compilador de C++: "Si no encuentras un identificador, antes de darme error buscalo en el namespace std". Esta opción sólo es útil si no tienes un conflicto de nombres (otro identificador que quieras usar y que se llame endl, por ejemplo).
Total, tu problema se deberá a eso. En el ejemplo que te funciona con iostream (sin .h) seguramente se deberá a que algún otro .h especifica el "using namespace std", o a alguna opción en la que no se hacen caso de los namespaces o algo por el estilo.

Suerte!
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

RE:problema raro con #include

Publicado por jack (1 intervención) el 05/01/2003 01:30:17
Ahi va!! Es verdad que se me habia olvidado el "using namespace". Muchas gracias por tu respuesta, ahora entiendo mucho mejor lo de los namespaces (mas o menos tenia una idea de que son, pero no demasiado buena).
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