jueves, 3 de junio de 2010

Solución al problema de la inclusión cíclica en C++

En aplicaciones complejas se puede dar el caso de que una clase(Class1) haga uso de otra(Class2), pero a su vez esta última haga uso de la primera.

En este caso estamos ante un problema de definición cíclica, para definir una clase se necesita la otra y viceversa. Se ejemplifica en el siguiente código.

#ifndef CLASS1_H
#define CLASS1_H

#include "class2.h"

class Class1{
void method(Class2* param);
};

#endif


#ifndef CLASS2_H
#define CLASS2_H

#include "class1.h"

class Class2{
void method(Class1* param);
};

#endif

Para solucionar este problema, podemos indicarle al compilador que la clase existe y será definida más adelante, así, aún teniendo dependencia cíclica se puede generar el código correctamente.
Para indicarselo al compilador tan solo hay que definir class Clase antes de usarla.

#ifndef CLASS1_H
#define CLASS1_H

#include "class2.h"

class Class2;

class Class1{
void method(Class2* param);
};

#endif


#ifndef CLASS2_H
#define CLASS2_H

#include "class1.h"

class Class1;

class Class2{
void method(Class1* param);
};

#endif

0 comentarios: