2011-03-02 20 views
15

Tengo una clase de plantilla C++ base::Foo<class T>, y tengo en otro archivo una clase base::bar::Foo : public base::Foo<Baz>. Doxygen parece no gustar, ya que genera un errorInforme de Doxygen "relación de clase recursiva potencial"

<unknown>:1: Detected potential recursive class relation between class snLib::mocTwod::DsaCell and base class DsaCell< snLib::mocTwod::ProblemTraits, detLib::cellDiffusionTwod::ProblemTraits >! 

¿Hay una manera de evitar que esto ocurra? La documentación de Doxygen no habla sobre este error ni nada sobre "posibles relaciones de clase recursivas".

La clase "base":

/*! \file snlib/DsaCell.hpp 
*/ 
#ifndef snlib_DsaCell_hpp 
#define snlib_DsaCell_hpp 
#include "Dsa.hpp" 

namespace snLib { 
/*! 
* \brief Implementation of naive cell-centered DSA 
*/ 
template <class HoTraits_T, class LoTraits_T> 
class DsaCell : public snLib::Dsa< HoTraits_T, LoTraits_T > 
{ 
    [snip] 
}; 
} 
#endif 

uno de sus descendientes que está causando el problema:

/*! \file snlib/twod/moc/DsaCell.hpp 
*/ 
#ifndef snlib_twod_moc_DsaCell_hpp 
#define snlib_twod_moc_DsaCell_hpp 
#include "snlib/DsaCell.hpp" 

#include "ProblemTraits.hpp" 
#include "detlib/twod/celldiffusion/ProblemTraits.hpp" 

namespace snLib { namespace mocTwod { 
/*! 
* \brief Inconsistent DSA for MOC 
*/ 
class DsaCell : public snLib::DsaCell< 
         snLib::mocTwod::ProblemTraits, 
         detLib::cellDiffusionTwod::ProblemTraits 
         > 
{ 
    [snip] 
}; 
} } // end namespace snLib::mocTwod 
#endif 
fichero de configuración

Mi Doxygen tiene muchas opciones de configuración, incluyendo la configuración de ruta: STRIP_FROM_PATH (establecer en el directorio raíz), STRIP_FROM_INC_PATH (mismo), INCLUDE_PATH (mismo).

Editar: parece que el error se arrojó en otro archivo Doxy que usó las etiquetas XML generadas por el nombre conflictivo, por lo que el problema estaba relacionado con eso. De todos modos, acabo de cambiar el nombre de la clase base a otra cosa y todo estaba bien de nuevo.

+2

Informar de un error, pero los nombres realmente anidados pueden entrar en conflicto para acomodar el desarrollo asincrónico por diferentes equipos. Reutilizar el mismo nombre a propósito aún se desaconseja, incluso si el idioma lo permite. –

+1

Debe publicar su código exacto, en lugar de una versión sintetizada de él. ¿Calificas completamente la clase base? –

+0

@Ben: Gracias por la sugerencia; Tal vez cambie el nombre de la clase base. –

Respuesta

1

Doxygen tiene una función que verifica si las clases A y B tienen una relación de herencia (directa o indirectamente), que es recursiva. La función comprueba la recursividad para una profundidad límite de 256.

Probablemente doxigen se confunde con su código (desde el nombre de coincidencia) y piense que la clase A depende de B y B depende de A nuevamente.

Podría ser un error de Doxygen, pero el mejor enfoque se puede cambiar el nombre de la clase.

Cuestiones relacionadas