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

C++语言 码拜 6年前 (2015-05-11) 1159次浏览 0个评论
 

求教求教
个人实现代码如下
#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

#ifndef NULL
#define NULL 0
#endif
5分
把NULL换成nullptr
请问这个原理是什么啊?谢谢啦
引用 3 楼 qq_27887201 的回复:

请问这个原理是什么啊?谢谢啦

缺少头文件

没问题
5分

#include<stdio.h>
没头文件
要包括
#incluce<iostream>
或者
#include<stdlib>
引用 1 楼 ytfhwfnh 的回复:

#ifndef NULL
#define NULL 0
#endif

乱说
应该包含头文件!

引用 8 楼 yangyunzhao 的回复:
Quote: 引用 1 楼 ytfhwfnh 的回复:

#ifndef NULL
#define NULL 0
#endif

乱说
应该包含头文件!

如果仅仅是缺少NULL的定义,按我的方式不是更简单么?过多的依赖,增加移植的复杂性。

5分
引用 9 楼 ytfhwfnh 的回复:
Quote: 引用 8 楼 yangyunzhao 的回复:
Quote: 引用 1 楼 ytfhwfnh 的回复:

#ifndef NULL
#define NULL 0
#endif

乱说
应该包含头文件!

如果仅仅是缺少NULL的定义,按我的方式不是更简单么?过多的依赖,增加移植的复杂性。

1、包含的文件是标准库头文件,理论上C编译器必须支持的,不会引起移植问题。
2、NULL 不一定为0,反而是你的定义可能带来移植问题。NULL从语义角度而言和0没有任何关系,代码里面用的应该是Null pointer含义。

引用 2 楼 paschen 的回复:

把NULL换成nullptr

我这个仅仅是一个.h文件的实现代码,如果加入
 #include<iostream> 
using namespace std;
降低了后面调用过程中复杂度,容易出现 头文件重载问题。
上面有一个老师说了 
 把 null 改成 nullptr 就行了
仔细搜索了一些资料,上面说 nullptr 是最新版c++标准新加的关键字,各个编译器怎么设别?这里也没有加头文件,就这个地方不懂了,求解啊

5分
引用 11 楼 qq_27887201 的回复:
Quote: 引用 2 楼 paschen 的回复:

把NULL换成nullptr

我这个仅仅是一个.h文件的实现代码,如果加入
 #include<iostream> 
using namespace std;
降低了后面调用过程中复杂度,容易出现 头文件重载问题。
上面有一个老师说了 
 把 null 改成 nullptr 就行了
仔细搜索了一些资料,上面说 nullptr 是最新版c++标准新加的关键字,各个编译器怎么设别?这里也没有加头文件,就这个地方不懂了,求解啊

明明有人回复了stdio.h,你非要iostream + using,也没有办法

此外,没有听说过因为多次包含标准库的头文件而出现所谓的“头文件重载”

把NULL直接改成0更安逸,

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明error C2065: “NULL”: 未声明的标识符
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!