Avatar ·

¿Cuál es la diferencia entre declaración y definición en C++?

¡Hola a todos! Acabo de empezar a aprender C++ y me confundí con los términos "declaration" y "definition". Parece que ambos están relacionados con la creación de variables y funciones, pero no entiendo cuál es la diferencia fundamental. Por ejemplo, escribo este código: ```cpp int x; // ¿Esto es declaration o definition? extern int y; // ¿Y esto? void foo(); // ¿Y esto? void foo() { } // ¿Y esto? ``` Cuando escribo `int x;` dentro de una función, el compilador crea la variable y asigna memoria para ella. Pero cuando escribo `extern int y;`, el programa no compila a menos que agregue `int y;` en otro lugar. ¿Por qué sucede esto? ¿Cuál es la lógica? También escuché que una declaration se puede repetir, pero una definition no. Sin embargo, en la práctica obtengo un error "multiple definition" si escribo `int x;` dos veces en el ámbito global. Pero si escribo `extern int x;` dos veces, funciona. Expliquen, por favor, cómo funciona esto en palabras simples, con ejemplos. ¡Gracias de antemano!