2013-07-19 35 views
0

我编译一些的boost :: Python代码,我不明白这样的错误:声明...作为函数的数组?

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

尝试用空格分隔最终模板支架:

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

C++ 11的修复这一点,但我不知道,如果你的编译器版本具有的修复。

在C++ 03,你的代码将被解析为包含位位移>>运营商,然后整个BLOB vector<shared_ptr<SomeClass>> vf=py::extract<vector<shared_ptr<SomeClass>>>能够以某种方式被误认为是函数的返回类型(即现在的=是一个模板参数内,因此没有按” t表示复制初始化)。

+0

如果事实证明这是正确的,**哇**。 – Xeo

+0

不,gcc 4.7对'>>>'没有任何问题。 '='不在模板参数中。 – eudoxos