提问人:Tan Nguyen 提问时间:9/12/2021 最后编辑:Ch3steRTan Nguyen 更新时间:9/12/2021 访问量:163
在类构造函数 c++ 中将其与指针数组一起使用
Using this with array of pointer in class constructor c++
问:
我试图将指针数组分配给nullptr。
class ToyBox
{
private:
Toy *toyBox[5];
int numberOfItems;
public:
ToyBox()
{
this->numberOfItems = 0;
this->toyBox = {}
}
}
在 this->toyBox 中抛出一个错误:
表达式必须是可修改的左值C/C++(137)
有什么建议要纠正吗?
答:
1赞
Ghasem Ramezani
9/12/2021
#1
您只能以这种方式初始化数组:为数组赋值。但是在构造函数中,您可以/必须使用 Member Initialize List:
class ToyBox
{
private:
Toy *toyBox[5];
int numberOfItems;
public:
ToyBox() :
toyBox{nullptr}
, numberOfItems(0)
{
}
};
使用 C++,最好使用而不是原始 C 数组:相关:CppCoreGuidlines:ES.27std::array
class ToyBox
{
private:
std::array<Toy*, 5> toyBox;
int numberOfItems;
public:
ToyBox() :
toyBox({nullptr})
, numberOfItems(0)
{
}
};
或者(我认为)更好:
ToyBox() : numberOfItems(0)
{
std::fill(toyBox.begin(), toyBox.end(), nullptr);
}
评论
0赞
Tan Nguyen
9/12/2021
谢谢,非常详细的回答!
1赞
JaMiT
9/12/2021
由于跟踪项目的数量,可能是比 更好的选择。事实上,更好的方法可能是 .ToyBox
std::vector
std::array
using ToyBox = std::vector<Toy*>
0赞
Tan Nguyen
9/14/2021
@JaMiT是固定代码,我别无选择,:(
2赞
JaMiT
9/15/2021
@TanNguyen 既然你被“固定代码”困住了,那么提到什么替代方案对你来说并不重要,不是吗?此外,该网站的目标是成为未来访问者的知识库(以问答形式)。这只是一个(经常发生的)奖励,当对未来访问者的好答案恰好也有助于最初的提问者时。为了未来的读者的利益而改进答案是件好事。(在我看来,改进仍然会提到改进,然后作为下一步提到。std::array
std::vector
评论
this->toyBox = {}
你期望它做什么?另外,不是指向数组的指针,而是指向指针的数组,这是有意的吗?Toy *toyBox[5];
nullptr