【问题标题】:How to initialise an array within a class in C++如何在 C++ 中初始化一个类中的数组
【发布时间】:2021-03-18 14:29:02
【问题描述】:

这是我的代码的想法

#include <array>

class B;

class A{
  private : 
    const size_t length;
    
    //3 dimensionnal array called Grid3D (see below)
    
  public : 
    A(size_t length)
    : length(length), Grid3D( std::array<std::array< *B , length>,length>,length>)
    {}
    
    //...
};

我真的不知道我应该怎么做,我一直有错误invalid use of non-static data member 'A::length'。长度不应该被修改,Grid3D 必须是一个数组,因为它的长度不应该被修改。

非常感谢您的帮助。

【问题讨论】:

  • 对于 std::array,长度必须是编译时已知的 constexpr。对于动态(在运行时)计算的长度,您应该使用std::vector
  • 虽然您报告的错误不是来自您发布的代码,但它还有其他错误:godbolt.org/z/PrPvrG

标签: c++ oop multidimensional-array attributes initialization


【解决方案1】:

如果您需要使用std::array,那么您需要确保在编译时知道大小。您将无法创建具有动态大小的网格(例如,如果您无法询问用户制作网格的大小)。

做到这一点的方法是将您的length 设为constexpr 变量并自己将其分配给一个固定值。或者,如果您想让其他人决定大小应该是多少(但在编译时仍然知道),那么您可以接受大小作为模板参数。

template<size_t L>
class A {
  Grid Grid3D;
 public:
   A()
    : Grid3D(std::array<std::array<std::array< *B , L>,L>,L>)
    {}
};

要使用,您只需构造A&lt;5&gt; myA{};

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 2012-02-02
    • 1970-01-01
    • 2010-09-14
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多