2012-06-21 18 views
10

Aquí está el código de ejemplo que me encontré en Visual Studio 2010:C++: La inicialización del puntero a puntero a int

#include <iostream> 

int main() 
{ 
    int **p(NULL); 
} 

consigo este error: error C2059: syntax error : 'constant'

Pero si cambio int **p(NULL); a int **p = NULL; la el código anterior compila bien.

Comprobó esto en GCC (Versión: 4.4.2) y ambos funcionan bien. ¿Que me estoy perdiendo aqui?

+0

probablemente, el compilador no es compatible. –

+0

Parece ser un error en el compilador. ¡Interesante! Tenga en cuenta que 'int * p (0);' funciona, mientras que 'int ** p (0);' no. – avakar

+1

Tenga en cuenta que si define 'typedef int * PINT;' y luego escribe 'PINT * p (NULL);' también funciona bien. 'int ** p (NULL);' definitivamente debería funcionar también. El hecho de que no es interesante. – LihO

Respuesta

3

VC++ compilador parece confundido sobre inicializaciones de puntero a puntero ...

Esto funciona por ejemplo

int (**p)(NULL); 

Estas no

int *i; 
int **p(&i); 
int **o(NULL); 

Esto funciona aunque

int (**p)(&i); 
typedef int* intp; 
intp *o(NULL); 

etc ... ¡el patrón es inicialización falla siempre que dos ** estén presentes! ¡Adivinaría un error! Alguien del equipo MSVC podría ser capaz de confirmar

-6

Obtiene un error de sintaxis: aparentemente NULL no está definido. Debería incluir cstdlib.

+5

Escribió que 'int ** p = NULL;' funciona. – LihO

0

Eso es un error en el compilador, o posiblemente haya hecho algo y le haya preguntado algo más.

MSVC10 apoyo algunas características de C++ 11, tales como las siguientes:

int **p1 = nullptr; 
int **p2{}; //initialized to nullptr! 

Puede probar cualquiera de estos. Ambos están bien.

+2

Eso es totalmente diferente .. Foco en la pregunta amigo ... :) –

+1

@Ashwinkumar: Bien. Editado mi respuesta. – Nawaz

+1

@Nawaz: No he pedido nada más que lo que he hecho :) – omggs

0

Parece que, defecto con Visual Studio, Funciona si yo uso C++ para compilar @http://codepad.org/ y ejecutar el siguiente código

int main() 
{  
    int **p(NULL); 
    return 0; 
} 

mismas obras utilizando compilador g ++, así .