同样一段使用std::sort的代码,vc可以编译通过,gcc出错,问题在哪里
void ConvexHull::convert_order_points(std::vector<MyPoint>& points){ if (m_points.size() < 3) return; class sort_func { public: bool operator()(const MyPoint& p1, const MyPoint& p2) { return p1.y < p2.y || (p1.y == p2.y && p1.x < p2.x); } } cmp_func; std::vector<MyPoint> temp_points = m_points; std::sort(temp_points.begin(), temp_points.end(), cmp_func); points.push_back(temp_points[0]); points.push_back(temp_points[1]); int top = 1; for(int i = 2; i < (int)temp_points.size(); i++) { while(top && !ral(points[top], points[top - 1], temp_points[i])) top--; points[++top] = temp_points[i]; }}class sort_func { public: bool operator()(const MyPoint& p1, const MyPoint& p2) { return p1.y < p2.y || (p1.y == p2.y && p1.x < p2.x); } } cmp_func;
[解决办法]
C++98、C++03标准中局部自定义类型不能实例化模版的问题,C++11中已解决。
可以改用支持C++11标准的g++(一般默认-std参数或者指明-std=c++11即可,如若-std=c++98或-std-c++03则不可)解决,也可将class sort_func类型的定义改为全局的。
[解决办法]