С++: Инициализация указателя на указатель на int
Вот пример кода, который я запускал в 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), и оба работают нормально. Что мне здесь не хватает?
Ответы
Ответ 1
Компилятор VС++ кажется путаным в отношении инициализации указателя на указатель...
Это работает, например,
int (**p)(NULL);
Это не
int *i;
int **p(&i);
int **o(NULL);
Это работает, хотя
int (**p)(&i);
typedef int* intp;
intp *o(NULL);
и т.д. шаблон не инициализируется, если присутствуют два **! Я думаю, ошибка! Кто-то из команды MSVC может подтвердить
Ответ 2
Это либо ошибка в самом компиляторе, либо, возможно, вы что-то сделали и попросили что-то еще.
MSVC10 поддерживает несколько функций из С++ 11, например:
int **p1 = nullptr;
int **p2{}; //initialized to nullptr!
Вы можете попробовать любой из них. Оба прекрасны.
Ответ 3
Похоже, дефект с Visual studio, он работает, если я использую С++ для компиляции @http://codepad.org/ и запускаю следующий код
int main()
{
int **p(NULL);
return 0;
}
То же работает с использованием компилятора g++.
Ответ 4
Вы получаете синтаксическую ошибку: видимо, NULL не определен. Вы должны включить cstdlib.