我在这里没有正确使用typeof()吗?

时间:2012-01-08 14:42:14

标签: c++ stl g++

我的代码看起来像这样

#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)

...

typedef vector<long> vl;
vl numbers;

...

tr(numbers, j) { // this is line 95
    ...
}

代码看起来没问题,但不适合我的编译器!无情地,我得到以下错误:

  

code.cpp:在函数'int main()'中:

     

code.cpp:95:9:错误:实例化后'std :: vector :: iterator'的特化

     

code.cpp:95:9:错误:在'typeof'之前预期的primary-expression

     

code.cpp:95:9:错误:'typeof'之前预期';'

     

code.cpp:95:9:错误:'j'的名称查找已更改为ISO'用于'范围'

     

code.cpp:95:9:注意:(如果你使用'-fpermissive',G ++会接受你的   代码)

     

code.cpp:95:9:错误:'j!=中的'operator!='不匹配   numbers.std :: vector&lt; _Tp,_Alloc&gt; :: end with _Tp = long int,_Alloc =   std :: allocator,std :: vector&lt; _Tp,_Alloc&gt; :: iterator =   __gnu_cxx :: __ normal_iterator&gt ;,typename std :: _ Vector_base&lt; _Tp,_Alloc&gt; :: _ Tp_alloc_type :: pointer =   long int *'

我在这里缺少什么?

2 个答案:

答案 0 :(得分:7)

宏中有一个缺少的括号。

#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
                                      ^
                                 Need ) here

尝试修复它,看看你得到了什么错误。

次要注意事项1:迭代时,使用++i代替i++,因为前者通常可以更快地用于迭代器。

次要注释2:typeof是GCC特定的扩展名。您的代码将无法在其他编译器上编译。

答案 1 :(得分:4)

我认为你错过了')'

#define tr(c,i) for(typeof((c).begin()) i = (c).begin(); i != (c).end(); i++)