2013-07-19 9 views
0

Я компиляции некоторые подталкивание :: код питона, и я не понимаю эту ошибку:Объявление ... как массив функций?

namespace py=boost::python; 
void func(py::tuple& t){ 
    /* ... */ 
    vector<shared_ptr<SomeClass>> vf=py::extract<vector<shared_ptr<SomeClass>>>(t[0])(); 
    /* ... */ 
} 

с GCC 4.7, -std=gnu++0x:

error: declaration of 't' as array of functions 

Что такое правильный способ написания такой же? py::extract<>(...)() является допустимым выражением -

+0

У вас может быть массив * указателей * для функций. У вас не может быть набора функций. –

+0

Вы не ошиблись в знаке '=', не так ли? –

+0

Если это помогает, 'SomeType (t [0])();' будет объявлять массив с именем 't' с нулевой длиной функций, которые не принимают аргументов и возвращают' SomeType'. Однако я не вижу, как ваш код может быть проанализирован именно таким образом. О, подождите, может быть ... –

ответ

0

Try отделяя скобки конца шаблона с пробелами:

vector<shared_ptr<SomeClass> > vf=py::extract<vector<shared_ptr<SomeClass> > >(t[0])(); 
//      ^           ^^ 

C++ 11 исправляет это, но я не уверен, что если ваша версия компилятора есть исправление.

В C++ 03, ваш код будет обработан как содержащий Bitshift >> операторов, а затем все блобо vector<shared_ptr<SomeClass>> vf=py::extract<vector<shared_ptr<SomeClass>>> может быть как-то ошибочно принимаем за тип возвращаемой функции (теперь = находится внутри аргумента шаблона, и поэтому Безразлично» t указать инициализацию копирования).

+0

Если это окажется правильным, ** ничего себе **. – Xeo

+0

Нет, gcc 4.7 не имеет проблем с '>>>'. '=' Не находится внутри аргумента шаблона. – eudoxos

Смежные вопросы