【发布时间】:2016-03-23 08:17:11
【问题描述】:
我试图从 C++ 中的向量中删除一个对象,但它给出了一个奇怪的(而且很长的)错误。我写了这个:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class foo
{
int a;
public:
foo(int _a):a(_a){}
};
int main() {
foo f1(5),f2(10);
vector<foo> vec = {f1,f2};
vec.erase(remove(vec.begin(),vec.end(),f1),vec.end()); // remove f1 (error)
return 0;
}
我得到的确切错误是here。
另一方面,当我创建一个 int 向量,然后尝试从该向量中删除一个整数时,它工作正常。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec = {5,10};
vec.erase(remove(vec.begin(),vec.end(),5),vec.end()); // works fine
return 0;
}
我不确定为什么在第一种情况下会出错。
【问题讨论】:
-
发布确切的错误信息
-
没有
foo::operator == -
我猜您会收到错误消息,因为您没有为
foo类定义比较运算符。否则编译器将如何知道如何比较foo类的实例? -
@MohitJain 我现在发布了一个显示错误的 ideone 链接。谢谢
-
错误信息告诉你,确切地,出了什么问题。阅读它们,对您了解它们发生的原因有很大帮助。