lunes, 22 de abril de 2013

Eclipse 1

Iniciando en Eclipse. Problema 1.
 
Hace pocos días empecé a mudarme de Visual Studio a Eclipse Juno dado que este segundo es gratis. Lo primero que hice fue descargar la versión para programar en Java, pero en la U siempre me enseñaron C++ y es un amigo que dificilmente abandonaré. Entonces, primero fuí a Help/Install new Software y descargue todo lo necesario para programar en C++, de hecho descargue cuanto plugin encontraba para cualquier lenguaje. Luego descargue cygwin, sólo los paquetes: Base, Devel, Editors y Libs.
 
Al probar el "hola mundo" funcionó perfectamente, incluso mudé un pequeño ejemplo de como trabajar con el API de Windows y también funcionó perfectamente. Dado esto me di a la tarea de realizar un programa para un cliente muy importante (mi papá) en el cual necesitaba tener conocimientos de C++ y mínimo del API de windows para crear una interfaz digna de cualquier sofware de Microsoft.
 
Tenía todos los conocimientos y había hecho todo el análisis del problema, entonces manos a la obra. En una noche cree las dos clases bases de las cuales se desprendía el resto del trabajo, en una de ellas necesitaba un miembro que fuera un nombre, por lo cual me incline por la tan conocida clase <string.h>, pero para mi sorpresa al compilar me decía que std::string no había sido declarado y llegó mi Karma de la semana.
 
Al buscar por internet encontré:
  1. No olvidar poner la sentencia using std::string; o using namespace std; lo cual ya había hecho entonces no era la causa del problema.
  2. También encontré que en vez de usar la clase <string.h> usara la clase <cstring> que viene siendo, según entendí, la versión de c++ de la clase, pero al probar seguía obteniendo errores.
  3. A parte de esto creí que había configurado mal el eclipse, borre código en todo lado y lo moví a toda parte, pero sin resultados y sin encontrar una solución satisfactoria por internet, lo cual me llevo a escribir esta entrada en este blog olvidado.
Eureka!!... Al probar la clase string en el main la sorpresa que me lleve es que funcionaba perfectamente, pero en la clase seguía sin funcionar, y a los pocos segundos de meditación agregue la biblioteca <iostream> a la clase y problema resuelto, todo funcionaba según lo planeado.
 
Solución: Se debe agregar la biblioteca iostream para que funcione cstring
 
El error que me mostraba era 'std::string' has not been declared, además de muchos 'string' has not been declared. El código finalmente utilizado fue análogo al siguiente:
 
//MiClase.h
 
#include <iostream> // Se necesita para cstring. It is needed for cstring
#include <cstring>
 
class xxx{
public:
  .....
private:
  string nombre;
  ....
};
 
Finalmente, quiero pedir que me digan porque esto es necesario, o que otro método hay, probablemene sea un incauto orgulloso de descubrir la rueda, por lo cual acepto todos los comentarios que quieran expresar (De forma educada obviamente)
 
Me despido y ojalá esto les sirva