构造函数将数组字段设置为空

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