sorted list program

kris289's Avatar, Join Date: Feb 2011
Newbie Member
I need help with the program. My line of code
while (ptr != NULL && compare(x, (*ptr).data == GREATER))
registers an error that says
lab1.cpp no match for 'operator==' in 'ptr->node::data == GREATER'
I use dev c++ as my compiler
any help will be appreciated

Code:
#include <iostream>
#include <string>
using namespace std;




              struct itemType
              {
                     string author;
                     string title;
                     float price;
              };
              
              struct node
              {
               itemType data;
              node *next;
              };
              
              
class sortedList
{
      private:
              node *head;
              
              
      public: 
              void add (itemType x);  
              sortedList ();  
};



enum compType {LESSER, GREATER, EQUAL};

compType compare(itemType x, itemType y);

int main ()
{
    typedef itemType book;
    sortedList shelf;
    book a,b,c,d;

    a.author = "J.K Rowling";
    a.title = "Harry Potter";
    a.price = 19.99;
    
    b.author = "C.S Lewis";
    b.title = "Chronicles of Narnia";
    b.price = 9.99;
    
    c.author = "Darren Shan";
    c.title = "Procession of the Dead";
    c.price = 14.99;
    
    d.author = "Albert Einstein";
    d.title = "Theory of Relativity";
    d.price = 4.99;
    
    shelf.add(a);
    shelf.add(b);
    shelf.add(c);
    shelf.add(d);
    
    cin.get();
    return 0;   
}

sortedList :: sortedList ()
{
     head = NULL;    
}

void sortedList :: add (itemType x)
{
    node *prev = NULL;
    node *ptr = NULL;
    node *temp = NULL;
    
    prev = NULL;
    ptr = head;
     
           while (ptr != NULL && compare(x, (*ptr).data == GREATER))

           {
               prev = ptr;
               ptr = (*ptr).next;
           }
           
           temp = new node;
           (*temp).data = x;
           
           if (prev == NULL)
           {
              (*temp).next = head;
		      head = temp;      
           }
           else
	{
		(*temp).next = ptr;
		(*prev).next = temp;
	}

}

compType compare (itemType x, itemType y)
{
      if ( x.price > y.price)
      {
         return GREATER;
      }
      else if (x.price < y.price)
      {
           return LESSER;
      }     
      else 
      {
      return EQUAL;     
      }
}
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
That's because ptr->data is of type
Code:
struct itemType
{
    string author;
    string title;
    float price;
};
but GREATER is an enum, i.e. an int. There is no built-in == operator for comparing an int with your structure, so you get the error.
shabbir like this
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
Also the error could have something to do with brackets. Look more closely at the brackets, and use an editor that shows which brackets match which, so you'll be less likely to make this kind of error:
Code:
while (ptr != NULL && compare(x, (*ptr).data == GREATER))
......(.................................................)
.............................(...............==........).
.................................(....)..................