gpt4 book ai didi

c++ - 当我用 g++ 编译器编译 c++ 时,错误是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 12:44:50 27 4
gpt4 key购买 nike

使用以下代码:

#include<iostream>
#include<vector>

using namespace std;

int main()
{
vector<int> ivec;
for(vector<int>::size_type ix = 0; ix != 10; ix++)
{
ivec.push_back(ix);
}
vector<int>::iterator mid = (ivec.begin() + ivec.end()) / 2;
cout << *mid << endl;
return 0;
}

使用 g++ 编译时出错:

iterator_io.cpp: In function `int main()':
iterator_io.cpp:13: error: no match for 'operator+' in '(&ivec)->std::vector<_Tp, _Alloc>::begin [with _Tp = int, _Alloc = std::allocator<int>]() + (&ivec)->std::vector<_Tp, _Alloc>::end [with _Tp = int, _Alloc = std::allocator<int>]()'
/usr/lib/gcc/x86_64-redhat-linux/3.4.5/../../../../include/c++/3.4.5/bits/stl_iterator.h:654: note: candidates are: __gnu_cxx::__normal_iterator<_Iterator, _Container> __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator+(const typename std::iterator_traits<_Iterator>::difference_type&) const [with _Iterator = int*, _Container = std::vector<int, std::allocator<int> >]
/usr/lib/gcc/x86_64-redhat-linux/3.4.5/../../../../include/c++/3.4.5/bits/stl_bvector.h:261: note: std::_Bit_iterator std::operator+(ptrdiff_t, const std::_Bit_iterator&)
/usr/lib/gcc/x86_64-redhat-linux/3.4.5/../../../../include/c++/3.4.5/bits/stl_bvector.h:345: note: std::_Bit_const_iterator std::operator+(ptrdiff_t, const std::_Bit_const_iterator&)
/usr/lib/gcc/x86_64-redhat-linux/3.4.5/../../../../include/c++/3.4.5/bits/stl_iterator.h:765: note: __gnu_cxx::__normal_iterator<_Iterator, _Container> __gnu_cxx::operator+(typename __gnu_cxx::__normal_iterator<_Iterator, _Container>::difference_type, const __gnu_cxx::__normal_iterator<_Iterator, _Container>&) [with _Iterator = int*, _Container = std::vector<int, std::allocator<int> >]

我知道 ivec.end() 不能用作法线 vector 元素。但是我不明白错误信息是什么意思......关于operator+的东西?

最佳答案

不能将两个迭代器加在一起。

operator+ 没有为两个迭代器定义,因为该操作没有意义。迭代器是对指针的一种概括——它们指向存储在容器中的特定元素。迭代器的总和指向哪个元素?

但是,当您使用 vector 时,您可以将整数添加到迭代器,如下所示:

vec.begin() + vec.size() / 2

这就是为什么你有 candidates are: (...) 在你的错误消息中,然后是 operator+ 的一些定义。

在您的情况下,最好、最干净的方法不是使用迭代器,而是简单的从指定位置获取值:

int mid = vec[vec.size() / 2];

关于c++ - 当我用 g++ 编译器编译 c++ 时,错误是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9684731/

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