Citar
ok, entiendo, pero yo tenía entendido que cuando tu definías algo, estas usando el constructor... o es que extern es la excepción?
Exactamente, así es; extern es para indicar que se trata de una declaración, no una definición, por eso es que la definición debe ir en algún otro lado. De todos modos hoy (a partir del C++17) es preferible la declaración inline https://en.cppreference.com/w/cpp/language/inline
Citar
Sin embargo, acabo de darme cuenta que incializar y definir no son la misma cosa...
... Más o menos... o, mejor, casi nunca...
Declarar, definir, inicializar, son palabras que tienen significados muy específicos, y con unos cuantos casos particulares, que algunas veces no ayudan para nada a la intuición.
En algunos casos la declaración y la definición son la misma cosa;
En casi todos los casos una definición implica la inicialización.
En matemática elemental tienes palabras como minuendo, sustraendo, resta, diferencia, que no pueden confundirse; o, también, dividendo, divisor, cociente, división. 0, ¿qué tal porciento, porcentaje, tasa, razón? Cada una significa algo específico pero que en el habla común usamos sin mucho cuidado. Bueno, en C++ es mucho peor.