我将电子邮件从文本文件加载到向量中,我想允许用户输入发件人的电子邮件,并在向量中找到并删除该对象, 但由于某种原因,我收到了错误。
这是函数
void deleteEmail(vector<Email> emailVector)
{
string junk;
getline(cin, junk);
cout << "Enter an email you want to delete" << endl;
string email_to_delete;
getline(cin, email_to_delete);
auto it = std::find(emailVector.begin(), emailVector.end(), email_to_delete);
if (it != emailVector.end())
emailVector.erase(it);
for (Email e : emailVector)
e.printEmail();
}
错误
Severity Code Description Project File Line Suppression State
Error C2678 binary '==': no operator found which takes a left-hand operand of type 'Email' (or there is no acceptable conversion) ProjectAlpha c:\program files (x86)\microsoft visual studio 14.0\vc\include\xutility 3258
以下是电子邮件类
中的数据类型class Email
{
private:
string sender;
string recipient;
string time;
string subject;
string body;
Attachment attachment;
答案 0 :(得分:2)
您需要通过引用传递vector
,而不是按值传递。否则,您正在操作原始矢量的副本,而不是原始矢量。
至于您的特定错误,您无法使用std::find()
在std::string
个对象的向量中找到Email
,因为您的Email
类没有有一个operator==
接受std::string
作为输入。您可以将std::find_if()
替换为谓词,例如:
void deleteEmail(vector<Email> &emailVector)
{
cout << "Enter the sender email address you want to delete:" << endl;
string email_to_delete;
getline(cin, email_to_delete);
auto it = std::find_if(emailVector.begin(), emailVector.end(),
[](const Email &email) {
// Email::sender is private, so you need
// to provide public access to it...
return (email.getSender() == email_to_delete);
}
);
if (it != emailVector.end())
emailVector.erase(it);
for (Email &e : emailVector)
e.printEmail();
}
如果您要从同一sender
删除所有电子邮件,则可以改为使用std::remove_if()
,例如:
void deleteAllEmail(vector<Email> &emailVector)
{
cout << "Enter the sender email address you want to delete:" << endl;
string email_to_delete;
getline(cin, email_to_delete);
auto it = std::remove_if(emailVector.begin(), emailVector.end(),
[](const Email &email) {
// Email::sender is private, so you need
// to provide public access to it...
return (email.getSender() == email_to_delete);
}
);
emailVector.erase(it, emailVector.end());
for (Email &e : emailVector)
e.printEmail();
}