2012-06-21 5 views
10

をint型へのポインタへのポインタの初期化は、私は、Visual Studio 2010で実行されていたサンプルコードは次のとおりです。C++:ここ

#include <iostream> 

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

私はこのエラーを取得する:error C2059: syntax error : 'constant'

しかし、私はint **p = NULL;int **p(NULL);を変更した場合上記のコードはうまくコンパイルされます。

これをGCC(バージョン:4.4.2)でチェックし、両方とも正常です。私はここで何が欠けていますか?

+0

おそらく、コンパイラはサポートしていません。 –

+0

コンパイラのバグと思われます。面白い! 'int * p(0);'は動作しますが、 'int ** p(0);は動作しません。 – avakar

+1

'typedef int * PINT;'を定義し、 'PINT * p(NULL);'を書くとうまくいくことに注意してください。 'int ** p(NULL);'も間違いなく動作するはずです。それは興味深いという事実はありません。 – LihO

答えて

3

VC++コンパイラは、ポインタへのポインタの初期化について混乱しているようだ...これは、例えば

int (**p)(NULL); 

のために働く

これらは、この作品ではない

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

を行う

int (**p)(&i); 
typedef int* intp; 
intp *o(NULL); 
かかわらず

など... 2つの**が存在する場合、パターンは初期化に失敗します!私はバグを推測するだろう! MSVCチームの誰かが

-6

構文エラーが発生しました。明らかにNULLが定義されていません。 cstdlibをインクルードする必要があります。

+5

彼は 'int ** p = NULL;'と書いています。 – LihO

0

これはコンパイラ自体のバグか、何かをして何か他のことを尋ねたことがあります。次のようなC++ 11から

MSVC10サポートいくつかの機能は、:

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

あなたはこれらのいずれかを試すことができます。どちらも問題ありません。

+2

それはまったく異なっています..質問のバディに集中してください。:) –

+1

@Ashwinkumar:申し分なく。私の答えを編集しました。 – Nawaz

+1

@Nawaz:私がやったこと以外に何か他のことを尋ねたことはありません:) – omggs

0

私もグラムを使用して

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

同じ作品++コンパイラをhttp://codepad.org/ @コンパイルし、次のコードを実行するために、C++を使用する場合それは動作しますが、Visual Studioに欠陥、のように見えることを確認することができるかもしれません。