我的代码看起来像这样
#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 *'
我在这里缺少什么?
答案 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++)