我的大学数据结构作业是用LinkedLists,
完成了代码,但编译器"剪辑"显示了一个错误描述资源路径位置类型
无效的操作数二进制表达式('ostream'(又名'basic_ostream')和'void') LinkedLists.cpp/LinkedLists/src行156 C/c++问题
,这是代码,这是什么问题呢?我该怎么补救呢?
谢谢^ ^
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;
}
在main
函数中,有以下三行:
cout<<insert();
cout<<add();
cout<<deletion();
如果你看看这些函数的原型:
node* insert ()
void add()
void deletion()
现在我们可以看到问题是什么了。在insert
的情况下,您试图将node*
传递到cout
。cout
不知道如何处理node*
。同样,add
和deletion
将void
传递给cout
,而cout
不知道如何处理。
有两个解决方案:
- 在
insert
,add
和delete
中打包string
,然后将该字符串返回给cout
。 - 从这些行中删除
cout
我建议第二个解决方案。这对您的项目来说要简单得多,并且不会破坏您计划对insert
的返回值所做的任何事情。你的主函数看起来像这样:
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;
}