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

时间:2015-04-26 20:27:56

标签: c++ arrays class null

我正在尝试创建一个将数组字段设置为null的构造函数。 我得到一个“没有可行的重载'='”错误

    Horse::Horse()
    {
        string *ptr;
        ptr = NULL;
        Name[SIZE] = ptr;

    }

我的问题是幕后究竟是怎么回事。我以为我可以创建一个字符串指针,将其设置为null,然后将数组设置为指针,它会使数组的第一个元素等于null?

由于

2 个答案:

答案 0 :(得分:0)

我会继续为你写下整件事。

  • 如果您考虑名称是什么,它只是一个字符串,一串字符。因此Name应为std::string。然后构造函数看起来像这样:

    Horse::Horse() {}
    

    完成。 Name将初始化为空字符串,即""

  • 如果作业要求您使用C字符串(char数组)而不是std::string,则Name应为char*类型,如果它需要设置为NULL。现在构造函数看起来像这样:

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

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

答案 1 :(得分:0)

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所述的原因