10

Visual Studio 2010 で実行したサンプル コードを次に示します。

#include <iostream>

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

次のエラーが表示されます。error C2059: syntax error : 'constant'

しかし、上記のコードに変更int **p(NULL);するとint **p = NULL;、正常にコンパイルされます。

GCC(バージョン:4.4.2)でこれを確認し、両方とも正常に動作します。ここで何が欠けていますか?

4

4 に答える 4

3

VC++ コンパイラは、ポインタへのポインタの初期化について混乱しているようです ...

これはたとえば機能します

int (**p)(NULL);

これらはしません

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

これは機能しますが

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

など... 2 つの ** が存在する場合は常に初期化が失敗するというパターンです! バグだと思います!MSVC チームの誰かが確認できるかもしれません

于 2012-06-21T09:17:30.650 に答える
0

これは、コンパイラ自体のバグであるか、何かを行って別の質問をした可能性があります。

MSVC10 は、次のような C++11 のいくつかの機能をサポートしています。

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

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

于 2012-06-21T09:14:03.553 に答える
0

Visual Studio の不具合のようです。C++ を使用して @ http://codepad.org/をコンパイルし、次のコードを実行すると機能します

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

g++ コンパイラを使用しても同じように動作します。

于 2012-06-21T09:30:33.790 に答える
-6

構文エラーが発生します:明らかにNULLが定義されていません。cstdlibを含める必要があります。

于 2012-06-21T09:07:57.453 に答える