大家好,我想知道我是否能在问题上得到一些帮助我在C ++中打印出矢量的内容
我试图以特定顺序在一个或两个函数调用中输出类的所有变量。但是,当迭代向量时,我收到一个奇怪的错误
我收到的错误是错误
error C2679: binary '=' : no operator found which takes a right-hand operand of type
'std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>>' (or there is no acceptable conversion)
我的相关代码如下
ifndef idea
#define idea
using namespace std;
class Idea{
private:
int id;
string proposer, content;
vector<string> keywords;
public:
Idea(int i);
Idea(int i, string pro, string con);
void inputIdea();
int getID(){ return id; };
string getProposer(){ return proposer; };
string getContent(){ return content; };
vector<string> getKeyword();
bool wordSearch(string word);
friend ostream& operator<< (ostream& stream, const Idea& i);
void printIdea(ostream& os)const;
};
bool Idea::wordSearch(string word){
vector<string>::iterator it;
for(it = keywords.begin(); it < keywords.end(); it++){
if (word == *it){
return true;
}
}
if (content.find(word) != string::npos){
return true;
}
return false;
}
void Idea::printIdea(ostream& os)const{
vector<string>::iterator it;
os << "ID: " << id << endl;
os << "Proposer: " << proposer << endl;
os << "keywords: ";
for (it = keywords.begin(); it < keywords.end(); it++){ // error C2679
os << *it << " ,";
}
os << endl << "content: " << content << endl;
}
ostream& operator<<(ostream& os, const Idea& i)
{
i.printIdea(os);
return os;
}
我发现它很奇怪,因为迭代器函数在代码的不同部分工作。
bool Idea::wordSearch(string word){
vector<string>::iterator it;
for(it = keywords.begin(); it < keywords.end(); it++){
if (word == *it){
return true;
}
}
if (content.find(word) != string::npos){
return true;
}
return false;
}
我希望打印出id,然后是提议者,然后是关键字,然后是内容。
答案 0 :(得分:2)
这是因为printIdea
是const
方法。我不允许const
种方法修改其成员,因此keywords.begin()
会返回vector<string>::const_iterator
,而不是正常的vector<string>::iterator
。您应该更改it
的类型:
vector<string>::iterator it;
为:
vector<string>::const_iterator it;
拥有兼容类型。
或者,如果您有一个支持C ++ 11的编译器,您可以让编译器为您解决:
auto it = keywords.begin()
答案 1 :(得分:0)
printIdea
定义为
void Idea::printIdea(ostream& os)const
表示该函数中的所有非静态成员都是const限定的。因为keywords.begin()
返回std::vector::const_iterator
而不是std::vector::iterator
。 std::vector::const_iterator
不能分配给``std :: vector :: iterator which is how
它被声明,所以你得到错误。你需要改变
vector<string>::iterator it;
到
vector<string>::const_iterator it;
为了让它发挥作用。
或者你可以使用基于范围的循环,甚至不必记住所有这些,如
for (auto& e : keywords)
{
os << e << " ,";
}
答案 2 :(得分:0)
您需要使用const_iterator
,因为您的方法printIdea()
是常量。
你应该使用!=将迭代器与end()进行比较。