构造函数将数组字段设置为空
Constructor setting array field to null
我正在尝试创建一个将数组字段设置为 null 的构造函数。
我收到 "no viable overloaded '=' " 错误
Horse::Horse()
{
string *ptr;
ptr = NULL;
Name[SIZE] = ptr;
}
我的问题是这里的幕后究竟发生了什么。我想我可以创建一个字符串指针,将其设置为空,然后将数组设置为指针,这将使数组的第一个元素等于空?
谢谢
我会继续写给你的。
如果你想一下name是什么,它只是一个字符串,一串字符。所以 Name
应该是 std::string
。那么构造函数将如下所示:
Horse::Horse() {}
完成。 Name
将被初始化为空字符串,即 ""
.
如果作业要求您使用 C 字符串(char
数组)而不是 std::string
,则 Name
类型应为 char*
,如果需要设置为NULL
。现在构造函数看起来像这样:
Horse::Horse() : Name(NULL) {}
Name
字段将被初始化为NULL
,即它将是一个空指针,因此它甚至不包含空字符串。
设置Name[SIZE]
指向std::string *
的地址是没有意义的
如果 Name
是一个 std::string 数组,则该数组将默认为空。
如果您的任务是在构造函数中将 Name
字段设置为空,我将假设这是一个 const char* 而不是 std::string。这可以使用 initializer list:
来完成
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;
,原因如下 here
我正在尝试创建一个将数组字段设置为 null 的构造函数。 我收到 "no viable overloaded '=' " 错误
Horse::Horse()
{
string *ptr;
ptr = NULL;
Name[SIZE] = ptr;
}
我的问题是这里的幕后究竟发生了什么。我想我可以创建一个字符串指针,将其设置为空,然后将数组设置为指针,这将使数组的第一个元素等于空?
谢谢
我会继续写给你的。
如果你想一下name是什么,它只是一个字符串,一串字符。所以
Name
应该是std::string
。那么构造函数将如下所示:Horse::Horse() {}
完成。
Name
将被初始化为空字符串,即""
.如果作业要求您使用 C 字符串(
char
数组)而不是std::string
,则Name
类型应为char*
,如果需要设置为NULL
。现在构造函数看起来像这样:Horse::Horse() : Name(NULL) {}
Name
字段将被初始化为NULL
,即它将是一个空指针,因此它甚至不包含空字符串。
设置Name[SIZE]
指向std::string *
的地址是没有意义的
如果 Name
是一个 std::string 数组,则该数组将默认为空。
如果您的任务是在构造函数中将 Name
字段设置为空,我将假设这是一个 const char* 而不是 std::string。这可以使用 initializer list:
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;
,原因如下 here