C ++使用迭代器访问向量中的对象

时间:2014-12-04 00:44:00

标签: c++ vector iterator

我有一个名为 TechReport 的课程,其中有一个名为评论的辅助课程。 Comment类的实例存储在 std :: vector m_comments

#ifndef TECHREPORT_H
#define TECHREPORT_H

#include <string>
#include <vector>
#include "Report.h"
#include "BadResponseException.h"

// Lets the compiler know that I will define later
class Comment;

class TechReport : public Report {
 public:
  TechReport(int aID, std::string author, std::string title,
             std::string textBody);

  virtual bool Search(std::string searchString) const;
  virtual void DisplayBody() const;
  virtual TechReport *CreateResponse(std::string author, 
                   std::string textBody, int nextID) throw(BadResponseException);

 private:
  int commentCount;
  std::vector<Comment> m_comments;

};

class Comment {
 public:
  std::string m_author;
  std::string m_textBody;

  Comment(std::string author = "", std::string textBody = "")
    : m_author(author), m_textBody(textBody) {}
};

#endif

我遇到的问题是在搜索方法中。在Search中我创建了一个迭代器,我在for循环中使用它来遍历向量中的元素。这是我的for循环:

// searchString is a string (duh)
vector<Comment>::iterator it;

for (it = m_comments.begin(); it != m_comments.end(); it++) {
  if (it->m_textBody == searchString) {
    cout << "Found it\n";
    return true;
  }
}

此代码生成以下错误:

error: no match for ‘operator=’ in ‘it = ((const TechReport*)this)-
>TechReport::m_comments.std::vector<_Tp, _Alloc>::begin [with _Tp = Comment, _Alloc = 
std::allocator<Comment>]()’

所以我假设错误源于我的for循环的初始化,但我不明白为什么。如果我错了,请纠正我,但迭代器是 随机访问迭代器,它具有与指针相同的功能?所有这一切都发生在它被设置为指向m_comments中的第一个元素。我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

我怀疑你是从const方法调用它,因此你有(const TechReport *)这个,并且 你试图从begin()到通常的迭代器

分配const_iterator

您可以将其更改为const_iterator并查看它是否有效吗?

vector<Comment>::const_iterator it;

....