我有一个名为 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中的第一个元素。我在这里缺少什么?
答案 0 :(得分:3)
我怀疑你是从const方法调用它,因此你有(const TechReport *)这个,并且 你试图从begin()到通常的迭代器
分配const_iterator您可以将其更改为const_iterator并查看它是否有效吗?
vector<Comment>::const_iterator it;
....