Básicamente, hay que bajar a la forma de escribir el compilador para el lenguaje. En C++, la decisión ha sido hacer posible una compilación de una sola pasada. Para hacer eso, usted (o más bien el compilador) necesita poder leer primero la declaración de todas las clases, métodos y similares y luego leer la implementación (o en términos de C++, la definición). En Java y C#, el compilador lee primero todo el código que genera lo que corresponde a lo que el compilador de C++ genera al leer los archivos de encabezado. El compilador C#/Java lee la implementación (definición aka). Entonces, en C++, se le pide al desarrollador que escriba la declaración, mientras que en C#, el compilador ejecuta el código varias veces haciendo el trabajo de declaración para el desarrollador.
Como nota aparte, otros idiomas solían pedirle que escribiera las funciones en el orden en que las necesitaba (si la función B usa la función A, primero debe definir A). La mayoría de esos idiomas tenían construcciones para permitirte evitar esto. En (Turbo) Pascal, la solución era, en un tipo, la misma que en C++.
Según sus preguntas, supongo que no le gusta mucho C++. –
En realidad, estaba enamorado de C/C++. Luego aprendí Java, me sentí bien. Ahora, estoy haciendo C#. Me encanta, pero ahora comencé a encontrar fallas en C/C++. :( – norris
No debemos olvidar que esta restricción se elimina en C++ para las llamadas a funciones miembro dentro de las clases 'struct A {void f() {g();/* before declarated! * /} Void g() {}}; ' –