当我试图在向量中搜索一个特定的值时,我会得到一个分割错误。向量是人的类型
struct Person{
string name;
string address;
string email;
string number;
string SocialSec;
string other;
};这是我的搜索功能:
void searchContact(vector<Person> &people) {
string searchTerm;
cout << endl;
cout << "Enter search term: ";
getline(cin, searchTerm);
vector<Person>::iterator it=find(people.begin(), people.end(), searchTerm);
if (it != people.end()){
cout << *it;
}else{
cout << "Element not found\n";
}
}下面是==和<<操作符的操作符重载:
ostream& operator<<(ostream &stream, const Person &it){
stream << it;
return stream;
}
bool operator==(const Person &lhs, const string &rhs){
return lhs.name == rhs;
}分段错误是这样的:
Program received signal SIGSEGV, Segmentation fault.
0x00005555555565ae in operator<< (
stream=<error reading variable: Cannot access memory at address 0x7fffff7feff8>,
it=<error reading variable: Cannot access memory at address 0x7fffff7feff0>) at class.cpp:114
114 ostream& operator<<(ostream &stream, const Person &it){
(gdb) 做一个回溯:
#1 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#2 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#3 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#4 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#5 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#6 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#7 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#8 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#9 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#10 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#11 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#12 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#13 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#14 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#15 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#16 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#17 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115
#18 0x00005555555565c9 in operator<< (stream=..., it=...) at class.cpp:115为什么会发生这种事,我该怎么解决呢?是堆栈溢出吗?
编辑:在最初的帖子中添加了operator<<重载以进行澄清。
发布于 2017-10-25 22:30:48
运算符应该打印Person类的基本类型。如下所示:
ostream& operator<<(ostream &stream, const Person &it){
stream << "This is the name: " << it.name;
return stream;
}如果您确实在函数中流<<,它将继续在无限递归调用中打印Person。
发布于 2017-10-25 22:25:44
哦,对不起,我有点弄错了。以下是我的operator<<重载:
ostream& operator<<(ostream &stream, const Person &it){
stream << it;
return stream;
}https://stackoverflow.com/questions/46942749
复制相似问题