C++ 函子定义中的函数

C++ 函子定义中的函数,c++,C++,我有以下函子,用于为向量类型重新定义排序方法的less运算符: typedef vector< vector<int> > MxInt2d; typedef vector< vector<double> > MxDouble2d; class QSweep{ public: .... static MxDouble2d myPoints_; MxDouble2d myEdges_; class order{ public:

我有以下函子,用于为向量类型重新定义排序方法的less运算符:

typedef vector< vector<int> > MxInt2d;
typedef vector< vector<double> > MxDouble2d;

class QSweep{   
public:
....
static MxDouble2d myPoints_;
    MxDouble2d myEdges_;

class order{
public:
    bool operator() (const vector<int>& edge1, const vector<int>& edge2){
        //std::cout<<"inside sort"<<endl;
        //3 sort criteria
        return (myPoints_[edge1[0]][0]<myPoints_[edge2[0]][0])|| 
                           (myPoints_[edge1[0]][0]==myPoints_[edge2[0]][0]&& 
                            myPoints_[edge1[0]][1]<myPoints_[edge2[0]][1]) 
               ||
                (myPoints_[edge1[0]][0]==myPoints_[edge2[0]][0]&& 
                             myPoints_[edge1[0]][1]==myPoints_[edge2[0]][1]&& 
                 getSlope(myPoints_[edge1[0]][0],myPoints_[edge1[0][1],  
                                      myPoints_[edge1[1]][0],myPoints_[edge1[1]][0])
                 <
                             getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],    
                                      myPoints_[edge2[1]][0],myPoints_[edge2[1]][0]));
            }
};
static double getSlope(double a, double b, double c, double d);

};
最后一个条件未满。 如果我有两条边,边[0]的x和y相同,但斜率不同,例如,斜率(边1)=1,斜率(边2)=1/2,我希望得到的值 [edge2,edge1];相反,我得到了[1边,2边]。 因此,我的getSlope标准不会被计算

是因为我声明了getSlope static吗?我应该改变什么以满足标准? 提前感谢您的建议,
madalina

可能是因为表达式结果可以在没有它的情况下进行计算。
例如:

这是一条很好的规则,它允许我们写下:

if ( ptr && ptr->someMethod() ) 
// call method will not be called for NULL pointers

哎呀!它看起来相当复杂,首先,您是否尝试过使用一组不太复杂的值来计算-例如,我看到您有cout语句,我相信它们在运行时能够正常工作

如果是这样的话,难道你对getSlope的输入是错误的吗

getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],    
         myPoints_[edge2[1]][0],myPoints_[edge2[1]][0])


我想我有false&&someFunction()用调试器或打印公式的部分来检查这一点。如果是-someFunction()是!!edge2的这个索引是错误的[1]。谢谢。是的,看起来很复杂。
false && someFunction(); - function will not be called
true || someFunction(); - function will not be called
if ( ptr && ptr->someMethod() ) 
// call method will not be called for NULL pointers
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],    
         myPoints_[edge2[1]][0],myPoints_[edge2[1]][0])
getSlope(myPoints_[edge2[0][0],myPoints_[edge2[0][1],    
         myPoints_[edge2[1]][0],myPoints_[edge2[1]][1])