我正在努力调试上述错误。我在下面提供了我的代码,以协助解决问题:
#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。什么都没有成功。如果您能够了解我所缺少的内容,那将非常感激。
答案 0 :(得分:1)
你可能想写:
Packet() : index(0), content("") { }
Packet(int i, string data) : index(i), content(data) { }
C ++标准不保留null
这个词。 NULL
是一个空指针常量,但不适合作为int
的初始化器(你可能会使用它,但它等同于写0,使用{{是不好的做法' 1}}您的意思是NULL
或0
),并且用'\0'
初始化string
也不合适。
你甚至可以使用:
NULL
使用带有默认参数的单个构造函数。
答案 1 :(得分:1)
我建议您阅读C ++中的内存管理。
要获取代码的一小部分:
class Packet
{
int index;
string content;
public:
Packet()
{
index = null;
content = null;
}
index
和content
不是指针或引用,它们是值;将null
分配给他们是没有意义的。
int index
声明一个名为index的整数变量;它可以采用的唯一值是您平台上int
可表示的范围内的数字(很可能是32位有符号数)。
类似地,string content
声明一个字符串对象,其中包含用于保存它的内存。 必须构造(在本例中为Packet
类构造函数)。尝试为其指定一个“null”值是没有意义的。
我猜你习惯于编写Java代码,其中对象变量总是引用,因此可以分配null
;在C ++中并非如此。
'null'的概念是指向任何东西的指针;在C ++中,这是nullptr
(在C ++ 11中)或0
(在早期的C ++标准中);在那些早期版本中#define NULL 0
是常见的。