无法找到operator <for指针类型

gca*_*dal 3 c++

我正在尝试使用带有重载<运算符的插入排序来命令指针向量(不能使用任何库).有一个包含另一个类的类,如:

class A {   
 vector<B*> v;
 void order();
}

class B {
int id;                         //each one is unique
virtual double num() {} const;
bool operator<(const B* b2) const;
}

class B1: public B {
double num() {} const;
}

class B2: public B {
double num() {} const;
}
Run Code Online (Sandbox Code Playgroud)

每个孩子都有不同的计算num的方法,并且使用num返回的double作为第一个标准,然后是id来完成排序.(对不起缩进)

void A::order() {

for (unsigned int p = 1; p < v.size(); p++)    
{
    ClassB* tmp = v[p];
    int j;
    for (j = p; j > 0 && tmp < v[j-1]; j--) // Error on this line
        v[j] = v[j-1];
    v[j] = tmp;     
}

}



bool B::operator<(const B* b2) const {

cout << "Operator <\n";

if(this->num()!=b2->num())
    return this->num()<b2->num();

return id<d2->id;

}
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么在尝试比较2个指针时没有调用运算符.

jua*_*nza 6

这个运营商

bool operator<(const B* b2) const;
Run Code Online (Sandbox Code Playgroud)

允许您将BLHS与B*RHS上的a 进行比较.您试图B*在两侧进行比较,因此操作员不适用.

你不能重写指针比较运算符,所以一个解决方案可能是比较B(或const B&)和在比较点取消引用你的指针:

for (j = p; j > 0 && *tmp < *v[j-1]; j--)
Run Code Online (Sandbox Code Playgroud)