gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:49:29 25 4
gpt4 key购买 nike

我的代码是这样的

#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: In function ‘int main()’:

code.cpp:95:9: error: specialization of ‘std::vector::iterator’ after instantiation

code.cpp:95:9: error: expected primary-expression before ‘typeof’

code.cpp:95:9: error: expected ‘;’ before ‘typeof’

code.cpp:95:9: error: name lookup of ‘j’ changed for ISO ‘for’ scoping

code.cpp:95:9: note: (if you use ‘-fpermissive’ G++ will accept your code)

code.cpp:95:9: error: no match for ‘operator!=’ in ‘j != numbers.std::vector<_Tp, _Alloc>::end with _Tp = long int, _Alloc = std::allocator, std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator >, typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer = long int*’

我在这里错过了什么?

最佳答案

宏中缺少括号。

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

尝试修复它,看看会出现什么错误。

注意事项 1:迭代时,使用 ++i 而不是 i++ 因为前者通常可以使迭代器更快。

小注 2:typeof 是 GCC 特定的扩展。您的代码不会在其他编译器上编译。

关于c++ - 我在这里没有正确使用 typeof() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com