鱼C论坛

 找回密码
 立即注册
查看: 5055|回复: 5

大家来看看出错的原因以及里有

[复制链接]
发表于 2013-1-2 01:31:23 | 显示全部楼层 |阅读模式
5鱼币
// test14.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
struct film
{
char name[40];
int mark;
};
typedef struct film Item;
typedef struct node
{
Item item;
struct node *next;
}Node;
typedef   Node  *List;
void Initialinelist(Node *plist);//初始化空链表指针
bool ListisEmpty(Node *plist);//确定指针是否为空
bool ListisFull(Node *plist);//确定指针是否满
unsigned int ListItemCount(Node *plist);//确定列表的个数
bool AddItem(Item item,Node *plist);//在尾部增加项目
void Traverse(Node *plist,void(*pfun)(Item item));//吧一个函数用于每个列表
void FreeList(Node *plist);//释放内存
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
void Initialinelist(Node* plist)
{
*plist=NULL;
}
bool ListisEmpty(Node *plist)
{
if(*plist==NULL)
{
  return true;
}
else
  return false;
}
bool ListisFull(Node *plist)
{
Node *pt;
bool full;
pt=(Node *)malloc(sizeof(Node));
  if(pt==NULL)
  {
   full=true;
  }
  else
   full=false;
   free(pt);
   return full;
}
运行报错
c:\users\administrator\desktop\test\test14\test14\test14.cpp(35) : error C2679: 二进制“=”: 没有找到接受“int”类型的右操作数的运算符(或没有可接受的转换)
1>        c:\users\administrator\desktop\test\test14\test14\test14.cpp(17): 可能是“node &node::operator =(const node &)”
1>        试图匹配参数列表“(Node, int)”时
1>c:\users\administrator\desktop\test\test14\test14\test14.cpp(39) : error C2676: 二进制“==”: “Node”不定义该运算符或到预定义运算符可接收的类型的转换
typedef   Node  *List; 这句话是把 定义个List的别名吧,bool ListisEmpty(Node *plist)
把Node改成List可以通过 但是我前面
typedef struct node
{
Item item;
struct node *next;
}Node;  不是已经定义了个 已NODE为别名的struct node
数据结构了嘛 为什么还要定义一次
在线等回答啊

最佳答案

查看完整内容

vs2008编译通过,修改两个地方,如下修改处1、plist是Node类型的指针,所以初始化只能用plist,*plist是对象,指向的是Node的结构,如果要初始化,不能这样赋值哦。 修改处2:理由:如1. 内部逻辑没有细看,自行调试哦。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-2 01:31:24 | 显示全部楼层
vs2008编译通过,修改两个地方,如下

  1. // test14.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <stdlib.h>
  5. struct film
  6. {
  7.         char name[40];
  8.         int mark;
  9. };
  10. typedef struct film Item;
  11. typedef struct node
  12. {
  13.         Item item;
  14.         struct node *next;
  15. }Node;
  16. typedef   Node  *List;
  17. void Initialinelist(Node *plist);//初始化空链表指针
  18. bool ListisEmpty(Node *plist);//确定指针是否为空
  19. bool ListisFull(Node *plist);//确定指针是否满
  20. unsigned int ListItemCount(Node *plist);//确定列表的个数
  21. bool AddItem(Item item,Node *plist);//在尾部增加项目
  22. void Traverse(Node *plist,void(*pfun)(Item item));//吧一个函数用于每个列表
  23. void FreeList(Node *plist);//释放内存
  24. int _tmain(int argc, _TCHAR* argv[])
  25. {
  26.         return 0;
  27. }
  28. void Initialinelist(Node* plist)
  29. {
  30.         plist=NULL;
  31. }
  32. bool ListisEmpty(Node *plist)
  33. {
  34.         if(plist==NULL)
  35.         {
  36.                 return true;
  37.         }
  38.         else
  39.                 return false;
  40. }
  41. bool ListisFull(Node *plist)
  42. {
  43.         Node *pt;
  44.         bool full;
  45.         pt=(Node *)malloc(sizeof(Node));
  46.         if(pt==NULL)
  47.         {
  48.                 full=true;
  49.         }
  50.         else
  51.                 full=false;
  52.         free(pt);
  53.         return full;
  54. }
复制代码
修改处1、
  1. void Initialinelist(Node* plist)
  2. {
  3.         plist=NULL;
  4. }
复制代码
plist是Node类型的指针,所以初始化只能用plist,*plist是对象,指向的是Node的结构,如果要初始化,不能这样赋值哦。
修改处2:
  1. bool ListisEmpty(Node *plist)
  2. {
  3.         if(plist==NULL)
  4.         {
  5.                 return true;
  6.         }
  7.         else
  8.                 return false;
  9. }
复制代码
理由:如1.
内部逻辑没有细看,自行调试哦。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-2 10:50:16 | 显示全部楼层

void Initialinelist(Node* plist) 这样难道不是指向Node结构的指针吗? 难道我理解错误了?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-2 10:54:55 | 显示全部楼层
253009514 发表于 2013-1-2 10:50
void Initialinelist(Node* plist) 这样难道不是指向Node结构的指针吗? 难道我理解错误了?

如果typedef   Node  *List; ,然后再把函数修改成 Void Initialinelist(List *plist) 这样也不会报错  可是为什么
Void Initialinelist(Node *plist)就不行了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-2 11:00:03 | 显示全部楼层
小新110 发表于 2013-1-2 09:43
vs2008编译通过,修改两个地方,如下修改处1、plist是Node类型的指针,所以初始化只能用plist,*plist是对象 ...

void Initialinelist(Node* plist) 这个我理解的是指向struct node结构的指针 相当于
void Initialinelist(struct node * plist)这样理解 错误了吗?所以我把plist的指向的地址做参数然后传递进函数来
然后把这个地址先设置为NULL  这样做法不行吗?指针这个概念我确实很模糊 请您赐教
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-2 14:43:33 | 显示全部楼层
小新110 发表于 2013-1-2 09:43
vs2008编译通过,修改两个地方,如下修改处1、plist是Node类型的指针,所以初始化只能用plist,*plist是对象 ...

Void Initialinelist(List *plist) 是否应该理解为 Void Initialinelist(Node**plist) 这样是取一个plist的指针的值,所以可以在函数代码中用*plist?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-9 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表