结构中带有类的链表无法让bool运算符工作

时间:2011-03-06 05:42:12

标签: c++ class linked-list boolean

我似乎无法使Boolean操作像我认为的那样有效。

/////.h file

class linkD
{

  private:
struct ListNode{
    driver driver;   ////class 
    ListNode *next;
};
ListNode *head;

///.cpp file

  void linkD::deleteNode(driver d){

ListNode *nodePtr;
ListNode *previousNode;
ListNode *newNode;
newNode=new ListNode;
newNode->next=NULL;
newNode->driver=d;

if(!head)
    return;
if(head->driver==d) //the problem is right here.
{
    nodePtr=head->next;
    delete head;
    head=nodePtr;
}

head->driver==d给出一个红线(无操作符“==”匹配这些操作数

我认为这是因为head->driver未初始化但我可能错了,我不确定如何初始化它,因为它在未初始化的结构中。

2 个答案:

答案 0 :(得分:1)

那是因为驱动程序是一个类对象。

您必须为类定义相等运算符。

您是否期望类对象成为指针(如在Java中,即它们可以为NULL)

如果要测试驱动程序对象的相等性,请按以下方式定义:

class driver
{
    public:
        bool operator==(driver const& rhs) const
        {
            return  x == rhs.x && y == rhs.y && z == rhs.z;
        }
    private:
        int x;
        int y;
        int z;
};

int test
{
     driver x;
     driver y;

     if (x == y)   // this calls x.operator==(y)
     {             // So y is the rhs parameter.
     }
}

答案 1 :(得分:1)

代码中的class/struct driver似乎没有定义operator ==(),因此编译器正在抱怨。