错误:未在此范围内声明“null”

时间:2014-10-14 03:04:29

标签: c++ pointers null nodes singly-linked-list

我正在努力调试上述错误。我在下面提供了我的代码,以协助解决问题:

#include <string>
using namespace std;

class Packet
{
    int index;
    string content;

    public:
        Packet()
        {
            index = null;
            content = null;
        }

        Packet(int i, string data)
        {
            index = i;
            content = data;
        }

        void setIndex(int i) {index = i;}
        void setContent(string input) {content = input;}
        int getIndex() {return index;}
        string getContent() {return content;}
};

我尝试添加#include <cstdlib>(来自here),#include <cstddef>,并手动定义null。什么都没有成功。如果您能够了解我所缺少的内容,那将非常感激。

2 个答案:

答案 0 :(得分:1)

你可能想写:

    Packet() : index(0), content("") { }
    Packet(int i, string data) : index(i), content(data) { }

C ++标准不保留null这个词。 NULL是一个空指针常量,但不适合作为int的初始化器(你可能会使用它,但它等同于写0,使用{{是不好的做法' 1}}您的意思是NULL0),并且用'\0'初始化string也不合适。

你甚至可以使用:

NULL

使用带有默认参数的单个构造函数。

答案 1 :(得分:1)

我建议您阅读C ++中的内存管理。

要获取代码的一小部分:

class Packet
{
    int index;
    string content;

    public:
        Packet()
        {
            index = null;
            content = null;
        }

indexcontent不是指针或引用,它们是值;将null分配给他们是没有意义的。

int index声明一个名为index的整数变量;它可以采用的唯一值是您平台上int可表示的范围内的数字(很可能是32位有符号数)。

类似地,string content声明一个字符串对象,其中包含用于保存它的内存。 必须构造(在本例中为Packet类构造函数)。尝试为其指定一个“null”值是没有意义的。

我猜你习惯于编写Java代码,其中对象变量总是引用,因此可以分配null;在C ++中并非如此。

'null'的概念是指向任何东西的指针;在C ++中,这是nullptr(在C ++ 11中)或0(在早期的C ++标准中);在那些早期版本中#define NULL 0是常见的。