我正在尝试编译以下代码:
#include <boost/geometry/geometries/point_xy.hpp>
#include <iostream>
#include <utility>
typedef boost::geometry::model::d2::point_xy<long> Point;
typedef std::pair<Point, Point> Vector;
bool operator==(const Point& p1, const Point& p2) {
return p1.x() == p2.x() && p1.y() == p2.y();
}
int main() {
Vector vec1(Point(0,0), Point(1,1));
Vector vec2(Point(0,0), Point(1,2));
std::cout << ((vec1 == vec2) == false) << std::endl;
std::cout << ((vec1 == vec1) == true) << std::endl;
}
VS2012 C编译器返回以下编译错误:
... VC\包含\实用程序(219):错误C2678:二进制 '==': 找不到运算符,该运算符采用“const Point”类型的左侧操作数(或者没有可接受的转换)
GCC C编译器返回以下编译错误:
/usr/include/c /4.8/bits/stl_pair.h:
在'bool std::运算符==(constd::对的html" target="_blank">实例化中
test.cpp:22: 28:需要从这里 /usr/include/c /4.8/bits/stl_pair.h: 215:51:错误:
不匹配'运算符=='(操作数类型是'常量提升::几何::模型::d2::point_xy'和'常量提升::几何::模型::d2::point_xy'){返回__x.first == __ y.first
如果我重载向量的==运算符,错误会消失:
bool operator==(const Vector& v1, const Vector& v2) {
return v1.first == v2.first && v1.second == v2.second;
}
失败的原因是std::对的
运算符==
使用==
来比较对的成员,这反过来又使用参数相关查找(ADL)来为它们找到正确的运算符==
。但是您在错误的命名空间中提供了重载,因为Point
实际上是::boost::几何::模型::d2
中的某种类型定义,而不是::
。
如果将操作符移动到正确的命名空间中(无论如何这是个好主意),它会起作用:
#include <boost/geometry/geometries/point_xy.hpp>
#include <iostream>
#include <utility>
typedef boost::geometry::model::d2::point_xy<long> Point;
typedef std::pair<Point, Point> Vector;
namespace boost { namespace geometry { namespace model { namespace d2 {
bool operator==(const Point& p1, const Point& p2) {
return p1.x() == p2.x() && p1.y() == p2.y();
}
} } } }
int main() {
Vector vec1(Point(0,0), Point(1,1));
Vector vec2(Point(0,0), Point(1,2));
std::cout << ((vec1 == vec2) == false) << std::endl;
std::cout << ((vec1 == vec1) == true) << std::endl;
}
现场示例
我已经为一个员工管理系统编写了代码,该系统将员工类对象存储到一个向量中,在我尝试编译之前没有错误,我得到了错误:C2679二进制 '==': 找不到运算符,该运算符需要一个类型为“constd::string”的右操作数(或者没有可接受的转换)。但是我不确定为什么会有任何帮助,谢谢!
如何访问使用关键字声明的此初始化程序的值? 在VS上给出以下编译错误: 二进制“[”:“std::initializer\u list”未定义此运算符或到预定义运算符可接受的类型的转换
二进制运算符"*"的操作数类型错误 我在编译过程中得到的错误是二进制运算符的坏操作数类型,表示:第一种类型:int第二种类型:int[],我只能使用这个逻辑。以下是我节目的一部分
我不知道如何修正我错误。错误状态 “DayCare.java:29:错误:二进制运算符”-“[numDaysString-1])的操作数类型不正确)第一类型:String第二类型:int”
java:11:error:二进制运算符“+”X t=(X+y+z)的操作数类型不正确;^first type:X second type:X其中X是类型变量:X扩展类parent中声明的对象注意:main.java使用未经检查或不安全的操作。注意:有关详细信息,请使用-xlint:unchecked重新编译。1个错误
问题内容: 我得到以下错误,尽管它恰好是示例中使用的错误: 错误:类型列表未接受参数 Java是1.7版,该类未命名。 问题答案: 您可能正在导入而不是