Estructura proyecto

Iniciado por gremboxic, 1 Mayo 2011, 09:37 AM

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

gremboxic

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

leogtz

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:


┌─[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 (cpp) [Seleccionar]
#ifndef _FIGURA_H
#define _FIGURA_H
class Figura
{
public:
Figura(const int&);
void setLados(const unsigned int &lados);
unsigned int getLados(void);
private:
unsigned int lados;
};
#endif


cpps/Figura.cpp

Código (cpp) [Seleccionar]
#include "../Clases/Figura.h"

Figura::Figura(const int &l)
{
    lados = l;
}

void Figura::setLados(const unsigned int &l)
{
lados = l;
}
unsigned int Figura::getLados(void)
{
return lados;
}


main.cpp:

Código (cpp) [Seleccionar]
#include "Clases/Figura.h"
#include <iostream>
int main(void)
{
    signed int lados = 2;
Figura fig(lados);

std::cout << fig.getLados() << std::endl;

return 0;
}


Compilación:

g++ main.cpp cpps/Figura.cpp -o salida


Ahora la estructura:

┌─[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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com