“El límite de la matriz no es una constante entera antes del token ‘]’ cuando se usan varios archivos

Estoy teniendo un problema con mi neural network. Estoy almacenando los nodos que conforman la red en una matriz, cuyas dimensiones se establecen mediante ajustes en el momento de la comstackción (todos los ajustes son constantes).

El código funcionó bien hasta que decidí dividirlo en varios archivos, pero incluso con una statement externa, todavía dice que “la matriz enlazada no es una constante entera antes del token ‘]'”.

En este momento, esta es la configuración: En Network.h:

struct Network { Node nodes [MNETWIDTH] [MNETLENGTH]; } 

En Network.cpp:

 Network::Network () { Node nodes [MNETWIDTH] [MNETLENGTH]; } 

Los ajustes se declaran en Misc.h (que se incluye en Network.h):

 //////////Genetics Tweaks extern int const MREPS; extern int const BEINGSPER; extern int const MUTRATE extern double const BTOKEEP; extern int const DNARANGE; ////////////Genetics Tweaks ////////////Network Tweaks extern const int MNETWIDTH; extern const int MNETLENGTH; ////////////End Network Tweaks 

y luego se definen en main.cpp

La definición de los nodos debe estar en un encabezado para que los archivos de origen puedan acceder a ellos, pero los ajustes constantes no pueden estar en un encabezado porque luego obtengo varios errores de statement. Pensé que declararlos como externos le diría que encontrara el valor constante en otro lugar, pero aparentemente no.

Intenté cambiarlo de una matriz a un Vector 2D, pero eso se convirtió en un desastre atroz, así que realmente me gustaría si pudiera hacer que esto funcionara.

Intenté declarar nodos como externos en Network.h fuera de la clase sin ningún parámetro de tamaño, luego lo definí en Network.cpp, pero sigo recibiendo el mismo error. Parece que necesita la definición constante en el mismo archivo en el que se está utilizando, pero tanto la variable const como los nodos son necesarios en varios archivos.

¿Alguna ayuda aquí?

Gracias

Para poder utilizarse como una expresión constante, se debe definir una variable constante, no solo declararla. Suponiendo que desea utilizarlo desde varias unidades de traducción, elimine el extern para darle un enlace interno (para que se pueda definir en cualquier unidad que lo necesite) y agregue un inicializador para dar el valor.

Además, elimine la statement de la matriz local del constructor. No estoy seguro de lo que quieres que haga, pero no hace nada útil.

los ajustes constantes no pueden estar en un encabezado porque luego obtengo varios errores de statement

Esto se debe a que extern les da un enlace externo, lo que los hace sujetos a la Regla de una definición.

Pensé que declararlos como externos le diría que encontrara el valor constante en otra parte

Le dice al comstackdor que el valor estará disponible en tiempo de ejecución; pero no le proporciona al comstackdor la definición. La definición es necesaria para usar el valor en una expresión constante.