我正在尝试创建一个将数组字段设置为null的构造函数。 我得到一个“没有可行的重载'='”错误
Horse::Horse()
{
string *ptr;
ptr = NULL;
Name[SIZE] = ptr;
}
我的问题是幕后究竟是怎么回事。我以为我可以创建一个字符串指针,将其设置为null,然后将数组设置为指针,它会使数组的第一个元素等于null?
由于
答案 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所述的原因