错误:未在此范围内声明"null"
error: "null" was not declared in this scope
我已经无计可施了,无法调试上述错误。我在下面提供我的代码来帮助进行故障排除过程:
#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;
}
index
和content
不是指针或引用,它们是值;将CCD_ 13分配给它们是没有意义的。
int index
声明了一个称为index的整数变量;它可以采用的仅限的值是平台上int
表示的范围内的数字(很可能是32位带符号的数字)。
类似地,string content
声明了一个字符串对象,并带有容纳它的内存。必须构造它(在本例中为Packet
类构造函数)。尝试给它分配一个"null"值是没有意义的。
我猜您已经习惯于编写Java代码,其中对象变量总是引用,因此可以分配null
;这在C++中是不正确的。
"null"的概念是一个指向任何东西的指针;在C++中,它被写为nullptr
(在C++11中)或0
(在早期的C++标准中);它对于那些早期版本中的CCD_ 21是常见的。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 声明新节点但不等于 NULL
- C++ 模板 NULL 未声明的标识符
- 错误:未在此范围内声明"null"
- 错误:将整数设置为 0 时,未在此范围内声明'null' - 光子/Arduino C++
- 派生类的头文件中声明的字符串在超级类中为null
- 将 head 设置为 NULL ('NULL' : 未声明的标识符)
- 检查在模板第一个参数之后声明的函数是否为 NULL(传递向量和数组)
- 在此范围内未声明NULL
- 如何用null声明和初始化多维数组
- 使用前向声明编译时"null"?
- 如何声明一个函数,该函数创建一个永远不会为 null 的对象