¿Cuáles son las diferencias entre Test t; y prueba t () ;? si la prueba es una clase

Posible duplicado:
¿Por qué no hay llamada al constructor?

Estoy usando Visual Studio 2012, Supongamos que Test es una clase

class Test { }; 

Cuando creo una nueva instancia de Test, ¿cuál es la diferencia de las dos formas siguientes?

forma 1

 Test t; 

camino 2

 Test t(); 

Obtuve esta pregunta en el código a continuación, originalmente, definí una instancia de A en la forma 2, solo obtuve un error porque B no proporciona un constructor predeterminado, pero cuando lo definí en la forma 1, obtuve un error adicional.

 class B { B(int i){} }; class A { A(){} B b; }; int main(void) { A a(); // define object a in way 2 getchar() ; return 0 ; } 

Si defino un modo 1

 A a; 

Tendré otro error dicho

error C2248: ‘A :: A’: no ​​se puede acceder al miembro privado declarado en la clase ‘A’

Así que supongo que debe haber algunas diferencias entre las dos formas.

introduzca la descripción de la imagen aquí

Test t; Define una variable llamada t de tipo Test .

Test t(); declara una función llamada t que no toma parámetros y devuelve una Test .

¿Cuál es la diferencia entre dos declaraciones?

 A a(); 

Declara una función y no un objeto. Es uno de los análisis más desconcertantes en C ++.
Declara una función por el nombre a que no toma parámetros y devuelve un tipo A

 A a; 

Crea un objeto denominado a del tipo A llamando a su constructor predeterminado.

¿Por qué recibes el error de comstackción?

Para una clase, el especificador de acceso predeterminado es private por lo que recibe el error porque el constructor de su clase es private y no se puede llamar mientras se crea el objeto con la syntax anterior.