我目前正在编写一些迭代遍历向量的代码,并为该向量中的每个元素调用一个简单的print方法;但是,我对向量的经验非常有限,而且我在编译器接受这一段特定代码段时遇到了一些问题:
std::vector<Buyer *>:: iterator it;
Buyer *b;
for(it = buyers->begin(); it != buyers->end(); ++it) {
b = *it;
cout << b->getName();
}
其中买家是包含买家指针的向量。我更倾向于为此目的使用数组,但由于我需要在这个特定点使用向量,我不确定如何迭代它并最终尝试迭代器通过。
弹出的错误信息是:
Retailer.cpp:37:17: error: base operand of ‘->’ is not a pointer
for(it = buyers->begin(); it != buyers->end(); ++it) {
^
Retailer.cpp:37:40: error: base operand of ‘->’ is not a pointer
for(it = buyers->begin(); it != buyers->end(); ++it) {
根据我的理解,在那个混乱的地方显然有一个指针,我没有解除引用,但我不确定哪个元素是哪个或哪个我应该取消引用它...任何对于那些对c ++ vector / iterators没什么经验的程序员的想法?
答案 0 :(得分:3)
您的错误是byuers
不是指针,而是您编写buyers->begin()
。这应该是buyers.begin()
。 (当然buyers->end()
也一样)。
如果使用现代c ++ 11:
,可以显着简化代码for(Buyer* b : buyers)
{
// do something
}
答案 1 :(得分:0)
其他答案已经解释了你的错误,但他们没有给你答案,你可能正在使用C ++ 03(因为我不确定,我会添加我自己的答案)
在旧 C ++,C ++ 03中,您需要更改:
for(it = buyers->begin(); it != buyers->end(); ++it) {
到
for(it = buyers.begin(); it != buyers.end(); ++it) {
正如其他答案中已经说过的那样,这是因为->
需要一个指向它左侧的指针,但是你没有指针,你有一个对象,所以你需要使用.
运营商。