error C2065: “NULL”: 未声明的标识符

qq_27887201 2015-05-10 11:14:41
求教求教
个人实现代码如下
#ifndef LINKLIST_H
#define LINKLIST_H

typedef void Linklist ;

typedef struct tag_LinklistNode
{
tag_LinklistNode* next ;
}LinklistNode;

typedef struct tag_ListHead
{
LinklistNode node ;
int length ;
}ListHead ;

class list{
private:
ListHead head ;
public:
list()
{
head.length = 0 ;
(head.node).next = NULL ; //这个地方不被识别
}
list(list& )
{}
~list()
{
LinklistNode* temp = NULL ; //这里也不行
while( (head.node).next != NULL)
{
temp = (head.node).next ;
(head.node).next = ((head.node).next)->next ;
delete temp ;
}
}
//结点插入
int list_Insert(int pos ) ;
//整个list删除
bool list_Destroy();
//list遍历
bool list_Trval();
//结点删除
bool list_Destry(int pos);
//获取位置结点
bool list_Get(int pos,Linklist* pNode);
//获取list长度
int list_Length() ;

};

#endif
...全文
3079 点赞 收藏 15
写回复
15 条回复
GHXN_2014 2016年10月31日
加头文件#include<cstdlib>
回复 点赞
玻璃心orz 2016年05月24日

我都包括了,为什么还是说

求大神指导
回复 点赞
ytfhwfnh 2015年05月13日
把NULL直接改成0更安逸,
回复 点赞
ytfhwfnh 2015年05月12日
引用 8 楼 yangyunzhao 的回复:
[quote=引用 1 楼 ytfhwfnh 的回复:] #ifndef NULL #define NULL 0 #endif
乱说 应该包含头文件![/quote] 如果仅仅是缺少NULL的定义,按我的方式不是更简单么?过多的依赖,增加移植的复杂性。
回复 点赞
yangyunzhao 2015年05月12日
引用 11 楼 qq_27887201 的回复:
[quote=引用 2 楼 paschen 的回复:] 把NULL换成nullptr
我这个仅仅是一个.h文件的实现代码,如果加入 #include<iostream> using namespace std; 降低了后面调用过程中复杂度,容易出现 头文件重载问题。 上面有一个老师说了 把 null 改成 nullptr 就行了 仔细搜索了一些资料,上面说 nullptr 是最新版c++标准新加的关键字,各个编译器怎么设别?这里也没有加头文件,就这个地方不懂了,求解啊 [/quote] 明明有人回复了stdio.h,你非要iostream + using,也没有办法 此外,没有听说过因为多次包含标准库的头文件而出现所谓的“头文件重载”
回复 点赞
qq_27887201 2015年05月12日
引用 2 楼 paschen 的回复:
把NULL换成nullptr
我这个仅仅是一个.h文件的实现代码,如果加入 #include<iostream> using namespace std; 降低了后面调用过程中复杂度,容易出现 头文件重载问题。 上面有一个老师说了 把 null 改成 nullptr 就行了 仔细搜索了一些资料,上面说 nullptr 是最新版c++标准新加的关键字,各个编译器怎么设别?这里也没有加头文件,就这个地方不懂了,求解啊
回复 点赞
yangyunzhao 2015年05月12日
引用 9 楼 ytfhwfnh 的回复:
[quote=引用 8 楼 yangyunzhao 的回复:] [quote=引用 1 楼 ytfhwfnh 的回复:] #ifndef NULL #define NULL 0 #endif
乱说 应该包含头文件![/quote] 如果仅仅是缺少NULL的定义,按我的方式不是更简单么?过多的依赖,增加移植的复杂性。[/quote] 1、包含的文件是标准库头文件,理论上C编译器必须支持的,不会引起移植问题。 2、NULL 不一定为0,反而是你的定义可能带来移植问题。NULL从语义角度而言和0没有任何关系,代码里面用的应该是Null pointer含义。
回复 点赞
yangyunzhao 2015年05月11日
引用 1 楼 ytfhwfnh 的回复:
#ifndef NULL #define NULL 0 #endif
乱说 应该包含头文件!
回复 点赞
ytfhwfnh 2015年05月10日
#ifndef NULL #define NULL 0 #endif
回复 点赞
Chr1sGardn3r@10 2015年05月10日
没头文件 要包括 #incluce<iostream> 或者 #include<stdlib>
回复 点赞
mxway 2015年05月10日
加 #include<stdio.h>
回复 点赞
苏叔叔 2015年05月10日
没问题
回复 点赞
ytfhwfnh 2015年05月10日
引用 3 楼 qq_27887201 的回复:
请问这个原理是什么啊?谢谢啦
缺少头文件
回复 点赞
qq_27887201 2015年05月10日
请问这个原理是什么啊?谢谢啦
回复 点赞
paschen 2015年05月10日
把NULL换成nullptr
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告