【问题标题】:Iterating through a vector via pointers通过指针迭代向量
【发布时间】:2014-04-30 07:38:39
【问题描述】:

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

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++ 向量/迭代器?

【问题讨论】:

  • buyers 的声明是什么?
  • buyers其实是在这个类中继承的,但基本上是声明为vector买家
  • 基本上声明为向量?你可以说得更详细点吗?您的问题很可能是由于声明的具体细节造成的。
  • 嗯,实际上这就是它的声明方式(当然后面是 ;),但我相信我现在已经解决了这个问题。奇怪的是,我似乎已经通过简单地声明类购买者来解决它;在 Seller.h 文件的开头。这可能与两者都来自同一个类(我忽略了)这一事实有关,或者错误只是移动到错误列表中的不同位置 - 鉴于整个项目中还有十几个错误.

标签: c++ pointers vector iteration


【解决方案1】:

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

如果您使用现代 c++11,您可以显着简化您的代码:

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

【讨论】:

  • 或者更现代的,for(auto b : buyers)
  • @MooseBoys 我通常会这样做,但我认为这对于不熟悉 c++11 的人来说更容易理解
  • 嗯,虽然我试过了,但后来我收到的错误消息是“请求成员 'begin' in '((Retailer*)this)->Retailer::.Seller: :buyers',属于非类类型'int'"。
  • @Vincents 在这种情况下,我们需要更多上下文 - 我几乎不认为您会将 int 误认为 vector&lt;Buyer*&gt;...
【解决方案2】:

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

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

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

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

正如其他答案中已经说明的那样,这是因为 -&gt; 需要一个指向左侧的指针,但您没有指针,您有一个对象,因此您需要使用 . 运算符.

【讨论】:

  • 实际上我使用的是 c++11,但我同意问题在于使用 -> 运算符...不幸的是切换到 .并没有真正帮助问题,它只是给出了不同的错误信息。我相信我正在忘记我正在使用的数据类型,所以我将尝试使用不同的运算符进行试验,直到找到正确的代码。不过,感谢您的考虑!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
相关资源
最近更新 更多