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

error: "null" was not declared in this scope

本文关键字:声明 null 范围内 错误      更新时间:2023-10-16

我已经无计可施了,无法调试上述错误。我在下面提供我的代码来帮助进行故障排除过程:

#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>(从这里开始)、#include <cstddef>,并手动定义null。没有成功。如果你能说明我所缺少的,我将不胜感激。

您可能想要编写:

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

单词null不是由C++标准所保留的。NULL是一个空指针常量,但不适合作为int的初始值设定项(您可能会忽略它,但它相当于写入0,在您指0''的地方使用NULL是不好的做法),而且用NULL初始化string也不太合适。

你甚至可以使用:

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

有一个带有默认参数的构造函数。

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

要获取代码的小样本:

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

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

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

类似地,string content声明了一个字符串对象,并带有容纳它的内存。必须构造它(在本例中为Packet类构造函数)。尝试给它分配一个"null"值是没有意义的。

我猜您已经习惯于编写Java代码,其中对象变量总是引用,因此可以分配null;这在C++中是不正确的。

"null"的概念是一个指向任何东西的指针;在C++中,它被写为nullptr(在C++11中)或0(在早期的C++标准中);它对于那些早期版本中的CCD_ 21是常见的。