Связанный список с классом в структуре не может заставить работать операцию bool - PullRequest
0 голосов
/ 06 марта 2011

Кажется, я не могу заставить 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 ]

1 голос
/ 06 марта 2011

class/struct driver в вашем коде, похоже, не определил operator ==(), и из-за этого компилятор жалуется.

1 голос
/ 06 марта 2011

Это потому, что драйвер - это объект класса.

Вы должны определить оператор равенства для класса.

Ожидаете ли вы, что объект класса будет похож на указатель (как в 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.
     }
}
...