Ubuntu下用g++ 5编译C++程序失败:iterator未声明问题求助
iterator未定义的错误 我来帮你搞定这个编译错误!你这段代码里的问题很明确——iterator是C++标准库中的类型,它属于std命名空间,直接使用的话编译器找不到它。
先看看你的代码:
#include<iostream> #include<iterator> int main() { iterator it; return 0; }
编译时出现的错误信息如下:
a.cc: In function ‘int main()’:
a.cc:5:5: error: ‘iterator’ was not declared in this scope
iterator it;
^
a.cc:5:5: note: suggested alternatives:
In file included from /usr/include/c++/5/bits/stl_algobase.h:65:0,
from /usr/include/c++/5/bits/char_traits.h:39,
from /usr/include/c++/5/ios:40,
from /usr/include/c++/5/ostream:38,
from /usr/include/c++/5/iostream:39,
from a.cc:1:
/usr/include/c++/5/bits/stl_iterator_base_types.h:118:12: note: ‘std::iterator’
struct iterator
^
两种可行的解决方法:
方法一:显式指定命名空间
在iterator前加上std::,明确告诉编译器去标准库命名空间中查找这个类型:#include<iostream> #include<iterator> int main() { std::iterator it; return 0; }这里额外提一句:
std::iterator是一个基类模板,通常不会直接实例化它,如果你是想使用某个具体容器的迭代器(比如std::vector<int>::iterator),记得调整代码哦。方法二:引入命名空间或具体类型
要是你不想每次都写std::,可以在文件开头添加using namespace std;(不过大型项目里不推荐这么做,容易引发命名冲突),或者只引入需要的std::iterator:#include<iostream> #include<iterator> using std::iterator; // 仅引入所需类型 int main() { iterator it; return 0; }
其实编译器给出的提示已经很贴心了,它明确指出了可以使用std::iterator,只是你没指定对应的命名空间而已~
内容的提问来源于stack exchange,提问作者rahul

