2016-10-29 1 views
0

J'ai des devoirs pour la structure de données au collège avec LinkedLists,opérandes invalides à l'expression binaire (« ostream » (alias « de basic_ostream <char> ») et « vide »)

ne le code, mais le compilateur « eclips » me montre une erreur appelée Resource description Emplacement du chemin type

opérandes invalides à l'expression binaire ('ostream' (alias 'basic_ostream') et 'vide') ligne LinkedLists.cpp/LinkedLists/src 156 C/C++ problème

et c'est le code, alors quel est ce problème? et comment puis-je le réparer?

Merci ^^

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; 

}

Répondre

0

Dans votre fonction main, vous avez ces trois lignes:

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

Si vous regardez les prototypes de ces fonctions:

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

Maintenant, nous pouvons voir quel est le problème. Dans le cas insert, vous essayez de transmettre un node* en cout. cout n'a aucune idée de comment gérer un node*. De même,et deletion passent un void en cout que cout ne sait pas comment gérer.

Il y a deux solutions:

  1. Pack A l'intérieur de stringinsert, add et delete, puis revenez à cette chaîne cout. Supprimer cout de ces lignes.

Je suggère la deuxième solution. C'est beaucoup plus simple pour votre projet, et il ne cassera pas ce que vous avez l'intention de faire avec la valeur de retour de insert. Votre fonction principale ressemblera à ceci:

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; 
} 
+0

merci, c'est utile ^^ – MuSaB07