【发布时间】:2018-04-16 11:17:53
【问题描述】:
以下产生错误:
int main() {
mat_int mat1(5, vector<int>{1,2,3});
mat_int mat2(5, vector<int>{4,5,6});
for (auto it1 = mat1.begin(); it1 != mat1.end() ; ++it1) {
for (auto it11 = *it1.begin(); it11 != *it1.end(); it11++)
cout << *it11;
cout << '\n';
}
}
编译器不接受内部循环迭代器; /home/asabbah/programming/C++/vectors1.cpp:16:28: 错误:'class __gnu_cxx::__normal_iterator*, std::vector > >' 没有名为'begin'的成员
但是,如果我插入一个临时变量:
vector<int> temp = *it1;
然后:
for (auto it11 = temp.begin(); it11 != temp.end(); it11++);
一切顺利。
知道为什么会这样吗?
【问题讨论】:
-
这是一个operator precedence 问题。尝试例如改为
it1->begin(),或(*it1).begin()。
标签: c++ c++11 pointers iterator