2012-06-21 15 views
10

Ecco il codice di esempio che mi sono imbattuto su Visual Studio 2010:C++: inizializzazione di puntatore a puntatore a int

#include <iostream> 

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

ottengo questo errore: error C2059: syntax error : 'constant'

Ma se cambio int **p(NULL);-int **p = NULL; il il codice sopra compila bene.

Controllato su GCC (Versione: 4.4.2) ed entrambi funzionano correttamente. Cosa mi manca qui?

+0

probabilmente, il compilatore non supporta. –

+0

Sembra un bug nel compilatore. Interessante! Si noti che 'int * p (0);' funziona, mentre 'int ** p (0);' no. – avakar

+1

Si noti che se si definisce 'typedef int * PINT;' e quindi si scrive 'PINT * p (NULL);' funziona anche bene. 'int ** p (NULL);' dovrebbe funzionare sicuramente pure. Il fatto che non sia interessante – LihO

risposta

3

VC++ compilatore sembra confuso circa inizializzazione di puntatore al puntatore ...

Questo funziona per esempio

int (**p)(NULL); 

Questi fanno non

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

Questo funziona se

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

ecc ... il modello è fallito durante l'inizializzazione ogni volta che sono presenti due **! Immagino un bug! Qualcuno del team MSVC potrebbe essere in grado di confermare

-6

Si verifica un errore di sintassi: apparentemente NULL non è definito. Dovresti includere cstdlib.

+5

Ha scritto che 'int ** p = NULL;' funziona. – LihO

0

Questo è un errore nel compilatore stesso, o forse hai fatto qualcosa e chiesto qualcos'altro.

MSVC10 supporto alcune caratteristiche di C++ 11, come il seguente:

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

Si può provare uno di questi. Entrambi stanno bene.

+2

Questo è completamente diverso .. Concentrati sulla domanda amico .. :) –

+1

@Ashwinkumar: Va bene. Modificato la mia risposta. – Nawaz

+1

@Nawaz: Non ho chiesto nient'altro che quello che ho fatto :) – omggs

0

Sembra, difetto con Visual Studio, Funziona se io uso C++ per compilare @http://codepad.org/ ed eseguire il seguente codice di

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

stesse opere utilizzando compilatore g ++ pure .