无法使用 ostream 输出 C++ 输出向量
Unable to output vector with an ostream output C++
你好,我想知道我是否可以得到一些帮助来解决我在 C++ 中打印向量内容的问题
我试图以特定顺序在一个或两个函数调用中输出 class 的所有变量。但是我在遍历向量时收到一个奇怪的错误
我收到的错误是错误
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,然后是proposer,然后是keywords,然后是content。
printIdea
定义为
void Idea::printIdea(ostream& os)const
这意味着该函数中的所有非静态成员都是 const 限定的。因为 keywords.begin()
returns std::vector::const_iterator
而不是 std::vector::iterator
。 std::vector::const_iterator
不可分配给 ``std::vector::iteratorwhich is how
it` 被声明所以你得到错误。你需要改变
vector<string>::iterator it;
至
vector<string>::const_iterator it;
为了让它工作。
或者,您可以使用基于范围的 for 循环,甚至不必记住所有这些,例如
for (auto& e : keywords)
{
os << e << " ,";
}
您需要使用 const_iterator
,因为您的方法 printIdea()
是常量。
并且您应该使用 != 将迭代器与 end() 进行比较。
这是因为 printIdea
是一个 const
方法。 const
方法不允许修改它们的成员,因此 keywords.begin()
returns 一个 vector<string>::const_iterator
,而不是一个普通的 (vector<string>::iterator
)。您应该更改 it
的类型:
vector<string>::iterator it;
至:
vector<string>::const_iterator it;
要有兼容的类型。
或者,如果您有一个支持 C++11 的编译器,您可以让编译器为您解决:
auto it = keywords.begin()
你好,我想知道我是否可以得到一些帮助来解决我在 C++ 中打印向量内容的问题
我试图以特定顺序在一个或两个函数调用中输出 class 的所有变量。但是我在遍历向量时收到一个奇怪的错误
我收到的错误是错误
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,然后是proposer,然后是keywords,然后是content。
printIdea
定义为
void Idea::printIdea(ostream& os)const
这意味着该函数中的所有非静态成员都是 const 限定的。因为 keywords.begin()
returns std::vector::const_iterator
而不是 std::vector::iterator
。 std::vector::const_iterator
不可分配给 ``std::vector::iteratorwhich is how
it` 被声明所以你得到错误。你需要改变
vector<string>::iterator it;
至
vector<string>::const_iterator it;
为了让它工作。
或者,您可以使用基于范围的 for 循环,甚至不必记住所有这些,例如
for (auto& e : keywords)
{
os << e << " ,";
}
您需要使用 const_iterator
,因为您的方法 printIdea()
是常量。
并且您应该使用 != 将迭代器与 end() 进行比较。
这是因为 printIdea
是一个 const
方法。 const
方法不允许修改它们的成员,因此 keywords.begin()
returns 一个 vector<string>::const_iterator
,而不是一个普通的 (vector<string>::iterator
)。您应该更改 it
的类型:
vector<string>::iterator it;
至:
vector<string>::const_iterator it;
要有兼容的类型。
或者,如果您有一个支持 C++11 的编译器,您可以让编译器为您解决:
auto it = keywords.begin()