2014-04-29 36 views
0

我目前正在编写一些遍历一个矢量的代码,并为该矢量中的每个元素调用一个简单的打印方法;但是,我有一个向量的经验非常有限,我有一些问题让编译器接受这个代码一个特定段:通过指针遍历一个矢量

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++向量/迭代器没有多少经验的程序员的任何想法?

+0

“买家”声明是什么? – MooseBoys

+0

买家实际上是继承了这个类,但它基本上宣称为矢量买家 – Vincents

+0

*基本上*声明为矢量?你可以说得更详细点吗?你的问题很可能是由于声明的细节。 – MooseBoys

回答

3

您的错误是,byuers不是一个指针,但你写buyers->begin()。这应该是buyers.begin()。 (当然,buyers->end()也一样)。

您可以显著简化你的代码,如果你使用现代C++ 11:

for(Buyer* b : buyers) 
{ 
    // do something 
} 
+0

或者更现代的说,“for(auto b:买家)”。 – MooseBoys

+0

@MooseBoys这就是我通常会这么做的方式,但是我认为这样可以更容易理解某人不用C++ 11 –

+0

hmm,但是我试过了,但是我得到的错误信息是“request for '((Retailer *)this) - >零售商:: .Seller ::买家',它是非类型'int'“的成员'begin'。 – Vincents

0

其他的答案已经解释了什么是你的错误,但他们并没有给你的C++ 03的答案,这你可能会使用(因为我不确定,我会添加自己的答案)。

C++,C++ 03,你需要改变:

for(it = buyers->begin(); it != buyers->end(); ++it) { 

for(it = buyers.begin(); it != buyers.end(); ++it) { 

正如在其他的答案已经指出,这是因为->要求一个指向它左边的指针,但是你没有指针,你有一个对象,所以你需要使用.运算符。

+0

其实我正在使用C++ 11,但我同意问题在于使用 - >运算符...不幸切换到。并不是真的有帮助,它只是给出了一个不同的错误信息。我相信我正在失去使用什么数据类型的踪迹,因此我会尝试尝试使用不同的操作员,直到找到正确的代码。但感谢您的考虑,但! – Vincents