在类构造函数 c++ 中将其与指针数组一起使用

Using this with array of pointer in class constructor c++

提问人:Tan Nguyen 提问时间:9/12/2021 最后编辑:Ch3steRTan Nguyen 更新时间:9/12/2021 访问量:163

问:

我试图将指针数组分配给nullptr。

class ToyBox
{
private:
  Toy *toyBox[5];
  int numberOfItems;

public:
  ToyBox()
  {
    this->numberOfItems = 0;
    this->toyBox = {}
  }
}

在 this->toyBox 中抛出一个错误:

表达式必须是可修改的左值C/C++(137)

有什么建议要纠正吗?

C++ 指针

评论

1赞 Quimby 9/12/2021
this->toyBox = {}你期望它做什么?另外,不是指向数组的指针,而是指向指针的数组,这是有意的吗?Toy *toyBox[5];
0赞 Mureinik 9/12/2021
这回答了你的问题吗?表达式必须是可修改的 L 值
0赞 JaMiT 9/12/2021
@Quimby我认为该行的期望是在问题的开头给出的:“将指针数组分配给 nullptr。这不是最好的措辞,但我相信这应该意味着“分配给数组中的指针”。nullptr
0赞 JaMiT 9/12/2021
在我看来,构造函数中这个奇怪的冒号成员(“ : ”)语法是什么?阅读可能会有所帮助。

答:

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
由于跟踪项目的数量,可能是比 更好的选择。事实上,更好的方法可能是 .ToyBoxstd::vectorstd::arrayusing ToyBox = std::vector<Toy*>
0赞 Tan Nguyen 9/14/2021
@JaMiT是固定代码,我别无选择,:(
2赞 JaMiT 9/15/2021
@TanNguyen 既然你被“固定代码”困住了,那么提到什么替代方案对你来说并不重要,不是吗?此外,该网站的目标是成为未来访问者的知识库(以问答形式)。这只是一个(经常发生的)奖励,当对未来访问者的好答案恰好也有助于最初的提问者时。为了未来的读者的利益而改进答案是件好事。(在我看来,改进仍然会提到改进,然后作为下一步提到。std::arraystd::vector