2012-10-02 10 views
7

Duplicar posible:
Why is there no call to the constructor?¿Cuál es la diferencia entre Test t; y Prueba t() ;? Si la prueba es una clase

Estoy utilizando Visual Studio 2012, supongamos que la prueba es una clase

class Test 
{ 
}; 

Al crear una nueva instancia de prueba, ¿cuál es la diferencia de las siguientes dos maneras?

forma 1

Test t; 

manera 2

Test t(); 

llegué a esta pregunta en el siguiente código, en un principio, que define una instancia de A en modo 2, tengo sólo un error porque B no proporciona un constructor predeterminado, pero cuando lo defino en el modo 1, recibí 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 una en forma de 1

A a; 

me tiene dicho otro error

error C2248: 'A :: A': no ​​se puede miembro privado de acceso declarado en la clase 'A'

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

Respuesta

50

enter image description here

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 Test.

+20

+1 para la imagen :-) –

+1

bueno, qué pregunta tan estúpida, estoy seguro de que sé eso antes, pero ... hoy no es mi día, :( – zdd

+0

@zdd sucede –

17

¿Cuál es la diferencia entre dos declaraciones?

A a(); 

Declara una función y no un objeto. Es uno de los Most vexing parse en C++.
Declara una función con 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 por defecto.

¿Por qué aparece el error de compilación?

Para un especificador de acceso por defecto es de clase private para que pueda obtener el error porque el constructor de la clase es private y no se puede llamar al crear el objeto con sintaxis anterior.

+0

muchas gracias. – zdd

Cuestiones relacionadas