Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gremboxic en 1 Mayo 2011, 09:37 am



Título: Estructura proyecto
Publicado por: gremboxic en 1 Mayo 2011, 09:37 am
Buenas,
hace tiempo que no programo en C++ y estuve bastante tiempo con Java.
Ahora me he vuelto a poner en C++ y echo de menos una cosa que gustaba mucho de Java, su organización.
En Java es muy fàcil crear packages y tenerlo todo bien ordenadito, y en C++ me encuentro que todo va dentro de src al monton.
Supongo que hay alguna forma de hacerlo un poco màs bonito (al fin y al cabo supongo que será qüestion de poner el path en el Makefile) però estoy desenvolupando en Anjuta y no encuentro la manera.
He provado de crear un grupo "dominio" (miscelaneous data) y poner las clases con ese objetivo, peró cuando compilo el main no hay problema, pero quan intento montarlo me dice que no puede resolver las referencias a funciones de otras clases.

Alguna idea, o una iluminación que me ayude a organizar mejor mis proyectos??

para poner un ejemplo un poco más ilustrativo, supongamos que tenemos una clase Ciclista, y otra CiclistaDAO y queremos tener "ma o menos" la estructura seguiente:
-domain
|-entities
| |-Ciclista (.h i/o .cpp)
| |-Bici (.h i/o .cpp)
| |-...
|-dao
| |-CiclistaDAO (.h i/o .cpp)
| |-BiciDAO (.h i/o .cpp)
| |-..
main.cpp

graicas


Título: Re: Estructura proyecto
Publicado por: leogtz en 1 Mayo 2011, 18:58 pm
Tu puedes dar la estructura que quieras, solo en los archivos de inclusión debes tomar bien en cuenta las rutas, aquí te pongo un ejemplo básico:


Código:
┌─[0 leo@archero ~/c_projects/organizacion]$
└─> tree
.
├── Clases
│   └── Figura.h
├── cpps
│   └── Figura.cpp
└── main.cpp

2 directories, 3 files

Un ejemplo básico.

Clases/Figura.h

Código
  1. #ifndef _FIGURA_H
  2. #define _FIGURA_H
  3. class Figura
  4. {
  5. public:
  6. Figura(const int&);
  7. void setLados(const unsigned int &lados);
  8. unsigned int getLados(void);
  9. private:
  10. unsigned int lados;
  11. };
  12. #endif

cpps/Figura.cpp

Código
  1. #include "../Clases/Figura.h"
  2.  
  3. Figura::Figura(const int &l)
  4. {
  5.    lados = l;
  6. }
  7.  
  8. void Figura::setLados(const unsigned int &l)
  9. {
  10. lados = l;
  11. }
  12. unsigned int Figura::getLados(void)
  13. {
  14. return lados;
  15. }
  16.  

main.cpp:

Código
  1. #include "Clases/Figura.h"
  2. #include <iostream>
  3. int main(void)
  4. {
  5.    signed int lados = 2;
  6. Figura fig(lados);
  7.  
  8. std::cout << fig.getLados() << std::endl;
  9.  
  10. return 0;
  11. }
  12.  

Compilación:

Código:
g++ main.cpp cpps/Figura.cpp -o salida

Ahora la estructura:

Código:
┌─[0 leo@archero ~/c_projects/organizacion]$
└─> tree
.
├── Clases
│   └── Figura.h
├── cpps
│   └── Figura.cpp
├── main.cpp
└── salida

2 directories, 4 files

En la inclusión de las cabeceras, debes de tomar en cuenta las rutas, tú puedes distribuir las cabeceras y sus implementaciones como quieras.

Saludos.