【发布时间】:2019-07-25 16:23:04
【问题描述】:
我正在学习 C++,这是我第一次使用迭代器
我已经写下了这段代码:
std::pair<max, max> ConvertToAStarMap::GetLimits(std::string map)
{
// Init max and min variables.
int max_x = std::numeric_limits<int>::min();
int min_x = std::numeric_limits<int>::max();
int max_y = max_x;
int min_y = min_x;
std::vector<std::string> map_cells = ConvertToAStarMap::split(map, ';');
for (std::string::iterator it = map_cells.begin(); it != map_cells.end(); ++it)
}
我得到这个错误:
ConvertToAStarMap.cpp: In member function ‘std::pair<max, max> ConvertToAStarMap::GetLimits(std::__cxx11::string)’:
ConvertToAStarMap.cpp:31:52: error: conversion from ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’ to non-scalar type ‘std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}’ requested
for (std::string::iterator it = map_cells.begin(); it != map_cells.end(); ++it)
~~~~~~~~~~~~~~~^~
ConvertToAStarMap.cpp:31:59: error: no match for ‘operator!=’ (operand types are ‘std::__cxx11::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >}’ and ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’)
for (std::string::iterator it = map_cells.begin(); it != map_cells.end(); ++it)
~~~^~~~~~~~~~~~~~~~~~
怎么了?没看懂。
【问题讨论】:
-
@NathanOliver 我知道这是初学者的错误,但这是一个有效且表述良好的问题。我认为 OP 应该得到一个正确的答案,对于有经验的 C++ 程序员来说,回答这个问题尽可能简单。
-
我不认为这是一个错字。这个问题来自对向量的迭代器类型如何工作的误解,初学者很容易发生这种情况(尤其是 C++ 的冗长迭代器类型)。拼写错误是一个简单的语法错误。
-
@VansFannel Meta 帖子与此问题相关; meta.stackoverflow.com/questions/387751/…(不要指望反对票的答案)