我已将电子邮件从文本文件加载到 vector 中,我想让用户输入发件人的电子邮件并在 vector 中找到它并删除该对象, 但由于某种原因,我收到了一个错误。
这是函数
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;
最佳答案
您需要通过您的 vector
通过引用,而不是通过值。否则,您操作的是原始 vector 的拷贝,而不是原始 vector 。
至于您的特定错误,您不能使用 std::find()
找到一个 std::string
在 Email
的 vector 中对象,作为你的 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();
}
关于C++ 从电子邮件 vector 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233880/