构造函数将数组字段设置为 null
Constructor setting array field to null
我正在尝试创建一个将数组字段设置为 null 的构造函数。我收到"没有可行的重载'='"错误
Horse::Horse()
{
string *ptr;
ptr = NULL;
Name[SIZE] = ptr;
}
我的问题是,这里幕后到底发生了什么。我想我可以创建一个字符串指针,将其设置为 null,然后将数组设置为指针,这将使数组的第一个元素等于 null?
谢谢
设置Name[SIZE]
指向std::string *
的地址是没有意义的。
如果Name
是 std::string 数组,则该数组将默认为空。
如果您的任务是在构造函数中将Name
字段设置为空,我将假设这是一个常量字符*而不是 std::string。这可以使用初始值设定项列表来完成:
Horse::Horse()
: Name{0} // Name{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} does the same thing.
{} // empty body
上面会将所有 20 个位置初始化为 0,或者如果您愿意,也可以初始化为 NULL。就像您在全局范围内声明它一样。
如果您不熟悉构造函数中的初始值设定项列表,您可以随时执行此操作,但需要额外付费:
Horse::Horse() // Initialize members runs first
{
for (int i = 0; i != SIZE; ++i) // Assign values to Name array
Name[i] = 0;
}
旁注:与其使用宏来定义值,
不如出于此处描述的原因使用 const unsigned SIZE = 20;
我会继续为你写整件事。
-
如果你考虑一下名字是什么,它只是一个字符串,一串字符。所以
Name
应该是一个std::string
.然后构造函数将如下所示:Horse::Horse() {}
做。
Name
将被初始化为空字符串,即""
. -
如果赋值要求你使用 C 字符串(
char
数组)而不是std::string
,那么如果需要设置为NULL
,Name
应该是char*
类型。现在构造函数将如下所示:Horse::Horse() : Name(NULL) {}
Name
字段将被初始化为NULL
,即它将是一个空指针,因此它甚至不包含空字符串。
相关文章:
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- C++ 由于类析构函数中的指针设置为 NULL 而导致的内存泄漏
- 删除对象与将指针设置为 null
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- STD :: Sort将数组指针设置为NULL
- 设置 NULL 会导致滞后,[MAX_STRING_LENGTH] = {'\0'};
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 将结构元素地址设置为C 中的null(单链接列表)
- 移动语义是否只是一个浅层副本并将其他人的指针设置为 null?
- 删除指针并将指针设置为null之间有什么区别
- 为什么我们需要在move构造函数中将右值引用设置为null
- 将数组中的元素设置为 0 或 NULL
- SQLBindParam:设置 Null 值失败 (ODBC)
- 如果指针设置为 NULL,则对它的任何引用都不会或通过它也是 NULL
- WCHAR_T设置为c 中的null
- 当我要删除它时,指针甚至无法设置为null
- 将对象的数组设置为c 中的null
- 在此初始值设定项方法上将整个数组设置为 NULL 是否C++标准?
- C++如果没有任何像 C# 那样传递的内容,请将函数参数设置为 null