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

Constructor setting array field to null

本文关键字:null 设置 字段 数组 构造函数      更新时间:2023-10-16

我正在尝试创建一个将数组字段设置为 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 ,那么如果需要设置为 NULLName应该是 char* 类型。现在构造函数将如下所示:

    Horse::Horse() : Name(NULL) {}
    

    Name字段将被初始化为 NULL ,即它将是一个空指针,因此它甚至不包含空字符串。