这是我在 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)上检查了这一点,两者都工作正常。我在这里想念什么?
这是我在 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)上检查了这一点,两者都工作正常。我在这里想念什么?
VC++ 编译器似乎对指针指针的初始化感到困惑......
例如,这有效
int (**p)(NULL);
这些不
int *i;
int **p(&i);
int **o(NULL);
这虽然有效
int (**p)(&i);
typedef int* intp;
intp *o(NULL);
等等......只要存在两个**,模式就会初始化失败!我猜是个bug!MSVC 团队的某个人可能能够确认
这要么是编译器本身的错误,要么可能是您做了一些事情并询问了其他事情。
MSVC10 支持 C++11 的一些特性,例如:
int **p1 = nullptr;
int **p2{}; //initialized to nullptr!
您可以尝试其中任何一种。两者都很好。
看起来,Visual Studio 有缺陷,如果我使用 c++ 编译 @ http://codepad.org/并运行以下代码,它就可以工作
int main()
{
int **p(NULL);
return 0;
}
使用 g++ 编译器也同样有效。
你得到一个语法错误:显然 NULL 没有定义。您应该包括 cstdlib。