MuSaB07
MuSaB07

Reputation: 23

invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'void')

I have homework for Data Structure in college with LinkedLists ,

did the code but the compiler "eclips" shows me an error called Description Resource Path Location Type

invalid operands to binary expression ('ostream' (aka 'basic_ostream') and 'void') LinkedLists.cpp /LinkedLists/src line 156 C/C++ Problem

and this is the code , so what's this issue ? and how can i fix it?

Thanks ^^

struct node {
    int StudentNumber;
    string name;
    node *link,*data;

    };

node *head,*newNode,*last;
string name;
int StudentNumber;

node* insert (){
            char a='n';
            cout<<"hello to linked lists insertion"<<endl;

            cout<<endl<<"please write your name : ";
            cin>>name;
            cout<<"please put the student number : ";
            cin>>StudentNumber;
            head=NULL;

            while(a!='n'||a!='N'){

                newNode = new node ;
                newNode->StudentNumber=StudentNumber;
                newNode->name=name;
                newNode->link=NULL;

                if (head==NULL)
                {
                    head=newNode;
                    last=newNode;

                }else {

                    last->link=newNode;
                    last=newNode;

                }//end else


                cout<<"please write your name : ";
                cin>>name;
                cout<<endl<<"please put the student number : ";
                cin>>StudentNumber;
                cout<<"Do you want to insert new nodes ? y for yes , n for no ";
                cin>>a;


            }//end while

            return head;
    }//end insert function


// adding nodes function

void add() {
    int j;
    cout<<"please choose your option for adding new node : 1 for add at the beginning , 2 for add at the end ";
    cin>>j;
    if (head!=NULL)
        {
    switch (j)
{
    // adding at the beginning
case 1 :
        newNode=new node;
        newNode->link=head;
        head=newNode;
        cout<<"please insert your node data : ";
        cout<<"Student Name : "<<newNode->data<<endl<<"and student number is : "<<newNode->StudentNumber;

    break;
    // at the end
case 2:
    newNode= head;
    while (newNode->link!=NULL)
    {
        newNode = newNode->link;

    }// end of while
    last= newNode;
    newNode = new node ;
    newNode->link=NULL;
    last->link=newNode;
    cout<<"please insert your node data : ";
    cout<<"Student Name : "<<newNode->data<<endl<<"and student number is : "<<newNode->StudentNumber;
    break; // end of case adding at the end


}
}else {cout<<"The list is empty";}

}// ending of the adding nodes function


// delete node function

void deletion () {
    int s;
    cout<<"please choose your option for deleting nodes : 1 for delete the first , 2 for delete the last node ";
            cin>>s;
switch (s) {
// delete the first node
case 1 :
    newNode = head;
    last=head->link;
    head=last;
    delete newNode;
    break;

    //delete the last node
case 2:
    newNode=head;
    last=head;
    while (newNode->link!=NULL)
    {
        last=newNode;
        newNode=newNode->link;
    }
    last->link=NULL;
    delete newNode;
    break;


}//end of the switch


}// end of delete nodes function




int main() {
    int m;
    cout<<"Welcome to LinkedLists Example"<<endl;
    cout<<"enter your choice number , 1 for inserting nodes to the list , 2 for adding nodes , 3 for deleting nodes ";
    cin>>m;
    switch(m) {
    case 1:
        cout<<insert();
        break;
    case 2:
        cout<<add();
        break;
    case 3:
        cout<<deletion();
        break;


    }

return 0;

}

Upvotes: 2

Views: 7560

Answers (1)

Stewart
Stewart

Reputation: 5002

In your main function, you have these three lines:

cout<<insert();
cout<<add();
cout<<deletion();

If you look at the prototypes for these functions:

node* insert ()
void add() 
void deletion()

Now we can see what the problem is. In the insert case, you are trying to pass a node* into cout. cout has no idea how to handle a node*. Similarly, add and deletion are passing a void into cout which cout doesn't know how to handle.

There are two solutions:

  1. Pack a string inside of insert, add, and delete, then return that string to cout.
  2. Remove cout from those lines.

I suggest the second solution. It's much simpler for your project, and it won't break whatever you plan to do with insert's return value. Your main function will look like this:

int main() {
    int m;
    cout<<"Welcome to LinkedLists Example"<<endl;
    cout<<"enter your choice number , 1 for inserting nodes to the list , 2 for adding nodes , 3 for deleting nodes ";
    cin>>m;
    switch(m) {
      case 1:
        insert();
        break;
      case 2:
        add();
        break;
      case 3:
        deletion();
        break;
    }
    return 0;
}

Upvotes: 3

Related Questions