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);

等等......只要存在两个**,模式就会初始化失败!我猜是个bug!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 回答