Проблема создания массива C ++, специфичная для gcc 4.5 - PullRequest
3 голосов
/ 07 февраля 2011

Следующий код работает в версиях gcc 2.9–4.4, но не в версии 4.5:

 struct Pass {
 };

 int main(void){
 Pass **passes = new ( Pass (*[ 10 ]) );
 }

Конкретное сообщение об ошибке с gcc 4.5:

prob.cc: In function ‘int main()’:
prob.cc:6:31: warning: lambda expressions only available with -std=c++0x or -std=gnu++0x
prob.cc:6:38: error: no matching function for call to ‘Pass::Pass(void (&)())’
prob.cc:2:1: note: candidates are: Pass::Pass()
prob.cc:2:1: note:                 Pass::Pass(const Pass&)

Добавление запрошенного флага заставляет замолчать начальное предупреждение, но не устраняет проблему. Может кто-нибудь объяснить, как это исправить? Это из какого-то неясного фрагмента кода C ++, который я поддерживаю, и я знаю только ограниченное количество C ++.

Ответы [ 4 ]

5 голосов
/ 07 февраля 2011
Pass** passes = new Pass*[10];
3 голосов
/ 07 февраля 2011

Я думаю, что это сделает это:

typedef Pass * PassPtr;
Pass **passes = new PassPtr[10];
2 голосов
/ 07 февраля 2011

Я не понимаю, почему вы так сильно пытаетесь это обернуть.

Pass** passes = new Pass*[10];

Разве это не работает?

1 голос
/ 07 февраля 2011

Используемые вами лишние скобки теперь делают компилятор похожим на то, что вы передаете конструктор Pass a lambda в качестве параметра. Лямбды - это новое дополнение в C ++ 0x, поэтому эта ошибка возникла только в новом компиляторе. Вы можете исправить это, используя Pass** passes = new Pass*[10];.

...