He convertido una plataforma de simulación científica de Java en C++. Intenté mantener el diseño tanto como sea posible igual a la implementación anterior. En Java debido a la vinculación tardía, las dependencias circulares se resuelven en el tiempo de ejecución. Sin embargo, las dependencias circulares han creado un desorden en C++.C++, dos clases con necesidades mutuas
¿Existe una herramienta automatizada que analiza y enumera las inclusiones y referencias circulares? (Visual Studio 2010 solo emite una gran lista de errores sin sentido).
He intentado utilizar referencias avanzadas siempre que sea posible. Sin embargo, en algunas ocasiones ambas clases necesitan funcionalidad de la otra clase (es decir, llamada a métodos que hace que sea imposible usar la referencia directa). Estas necesidades existen en Logic y si cambio radicalmente el diseño, ya no representarán interacciones del mundo real.
¿Cómo podríamos implementar dos clases que necesitan los métodos y el estado de los demás? ¿Es posible implementarlos en C++?
Ejemplos:
- Ejemplo 1: Tengo una clase llamada "World", que crea los objetos del tipo "agente". El agente necesita llamar a los métodos mundiales para obtener información de su entorno. World también necesita iterar a través de Agentes y ejecutar su método "ejecutar" y obtener su estado (es posible que las actualizaciones de estado se realicen en sentido inverso para resolver esta sección del problema, pero no el método de ejecución).
- Ejemplo 2: Los agentes crean una colección de sus "Intenciones". Cada agente necesita repetir sus intenciones y ejecutar/actualizar/leer el estado de intención. Las intenciones también necesitan obtener información sobre el entorno a través del Agente (si se hace directamente a través de "Mundo" creará círculos complejos nuevamente) y también la información del Agente mismo.
A continuación diagrama muestra un sub-conjunto de clases, y algunos de sus métodos y propiedades:
Si tiene problemas con los errores, siempre puede publicar una pregunta que contenga esos errores (literalmente, por favor) y es probable que alguien pueda ayudarlo. Además, esos errores pueden ser absurdos para usted, pero no para otra persona. También es muy difícil responder preguntas sin ver algún código, y para esto te recomiendo que leas http://sscce.org/. –
Joachim, son el tipo de errores que se generan en casos de dependencia circular. Las clases no pueden ser identificadas. 'código' 1> e: \ programación \ cprojt \ actiondb11 \ actiondb \ base \ world.h (35): error C2143: error de sintaxis: falta ',' antes '*' 1> e: \ programming \ cprojt \ actiondb11 \ actiondb \ base \ world.h (36): error C2061: error de sintaxis: identificador 'Agente' 1> e: \ programming \ cprojt \ actiondb11 \ actiondb \ base \ world.h (50): error C2065: ' Agente ': identificador no declarado – wmac
Publicar el código es mucho más útil que publicar los errores. Publicar * ambos * es lo mejor. –