C:错误 C2784:'bool std::运算符<
C: error C2784: 'bool std::operator <
我用的是Visual Studio 2010。
struct SPoint
{
int id;
int X;
int Y;
};
////////////////
vector<SPoint> points;
vector<SPoint> chosen;
////////////////
void print_vect(const vector<SPoint> & vect)
{
for (int i = 0; i < vect.size(); ++i)
{
cout << vect[i].id << " (" << vect[i].X << "," << vect[i].Y << ")"<<endl;
}
cout << endl;
}
////////////////
print_vect(points);
编译器显示:
1>c:program files (x86)microsoft visual studio 10.0vcincludealgorithm(4674): error C2784: 'bool std::operator <(const std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::move_iterator<_RanIt> &' from 'SPoint'
1> c:program files (x86)microsoft visual studio 10.0vcincludeiterator(371) : see declaration of 'std::operator <'
我在一个单独的项目中建模:
struct SPoint
{
int X;
int Y;
};
vector<SPoint> points;
vector<SPoint> selected;
void print_vector(const vector<SPoint> & points) {
for (int i = 0; i < points.size(); i++)
{
cout << '('<<points[i].X <<',' <<points[i].Y <<')'<< endl;
}
cout << endl;
}
int main ()
{
SPoint temp = {0, 0};
for (int i = 0; i < 11;i++)
{
temp.X = i;
temp.Y = i;
points.push_back(temp);
}
for (int i = 5; i< 11;i++)
{
temp.X = i;
temp.Y = i;
selected.push_back(temp);
}
print_vector(points);
system ("pause" );
return 0;
}
效果很好。我试图在这个问题上找到一些东西。他们说,编译器不能比较两个对象。将"<"方法添加到类中。但目前我学的是过程编程。那么,我的试验例子就成功了。为什么?该怎么做?
在您的代码中,set_difference
调用operator<
来比较points/chosen中的元素:
set_difference(points.begin(), points.end(),
chosen.begin(), chosen.end(), back_inserter(cleared));
要使你的代码编译,你需要重载operator<
点类型,例如:
bool operator<(const SPoint& lhs, const SPoint& rhs)
{
return lhs.id < rhs.id;
}
相关文章:
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 关于 std::min, std::max 中的比较运算符的混淆
- C++:无法使用 "=" 运算符更改 std::p air 的值
- 为 std::variant 提供一个运算符 ==
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- C++矩阵类运算符使用 std::common_type_t 和复数的实现
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 重载 + 自己的类和 std::string 的运算符
- std::bind on statd::array 的运算符 []
- 使用重载 [] 运算符返回 std::map() 的可赋值
- VSCode 说 std::chrono 是模棱两可的,如果运算符<<重载
- 重载 std::字符串运算符+ 用于打印枚举名称
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 重构使用动态强制转换的 std::set 的比较运算符
- std::string == 运算符在代码中不起作用
- 运算符 += 应用于 std::valarray<int*>
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符