C++ 错误:与';不匹配;运算符==';对于boost::tuple
我打算为C++ 错误:与';不匹配;运算符==';对于boost::tuple,c++,boost,operator-overloading,C++,Boost,Operator Overloading,我打算为boost::tuple #include <iostream> #include <vector> #include <boost/tuple/tuple.hpp> //#include <boost/tuple/tuple_comparison.hpp> /*namespace boost { namespace tuples {*/ bool operator==(const boost::tuple<int>&
boost::tuple
#include <iostream>
#include <vector>
#include <boost/tuple/tuple.hpp>
//#include <boost/tuple/tuple_comparison.hpp>
/*namespace boost { namespace tuples {*/
bool operator==(const boost::tuple<int>&, const boost::tuple<int>&){
return false;
}
/*}}*/
int main(){
boost::tuple<int> t, u;
std::vector<boost::tuple<int> > vec;
std::cout << (t == u); // [1]
find(vec.begin(), vec.end(), t); // [2]
}
#包括
#包括
#包括
//#包括
/*名称空间boost{名称空间元组{*/
布尔运算符==(常量boost::tuple&,常量boost::tuple&){
返回false;
}
/*}}*/
int main(){
boost::元组t,u;
std::vec;
std::cout您应该包括一个附加文件:
#include "boost/tuple/tuple_comparison.hpp"
因为运算符是在单独的标题中定义的
它不在全局名称空间中查找的原因是由于ADL的规则,ADL只在boost::tuples
名称空间(其中定义了元组)和std
名称空间中查找
阅读更多信息ADL
。当您在代码中仅使用运算符==
时,将处理名称空间boost::tuple
和全局名称空间
。
但是,由于find只在std名称空间中,因此将处理std
和boost::tuples
。请发布一个新的问题,如果您认为有帮助,请添加一个指向此问题的链接。嘿..您指向的链接说明并引用算法(ADL)告诉编译器不仅要查看本地作用域,还要查看包含参数类型的名称空间。
…这里的自定义运算符==
不是基本上在本地作用域中吗?还是我缺少了什么?@user1055604问题是失败发生在std::find的作用域中,而不是您自己的作用域中在这种情况下,它将只搜索boost和std名称空间。
#include "boost/tuple/tuple_comparison.hpp"