c++ - 如何在类中初始化动态数组?

标签 c++ arrays class dynamic

我希望在一个类中初始化一个多维动态数组。但是,我收到一个错误。

我在网上看到了几个例子。他们似乎很难。我是编码新手。如果可能的话,我想要一个简单的解决方案。

class myp
{
    int ntc = 5;
    public:
    double** y = new double*[ntc];
    for(int i = 0; i < ntc; ++i)
        y[i] = new int[3];
};
int main()
{
    int x;
    myp mp;
    mp.y[1][1] = 3;
    cout<<mp.y[1][1]<<endl;;
    return 0;
}

test.cpp:12:2: error: expected unqualified-id before ‘for’
  for(int i = 0; i < ntc; i++)
  ^~~
test.cpp:12:17: error: ‘i’ does not name a type
  for(int i = 0; i < ntc; i++)
             ^
test.cpp:12:26: error: ‘i’ does not name a type
  for(int i = 0; i < ntc; i++)

最佳答案

您需要在构造函数中进行类初始化,并在析构函数中进行清理。

class myp
{
  int m_numColumns;
  int m_numRows;
  double** y;
public:

  // overload array operators
  double* operator [] (size_t row) { return y[row]; }
  const double* operator [] (size_t row) const { return y[row]; }

  // return dimensions of array
  int numColumns() const { return m_numColumns; }
  int numRows() const { return m_numRows; }

  // constructor
  myp(int nc, int nr) : m_numColumns(nc), m_numRows(nr)
  {
    y = new double*[m_numRows];

    for(int i = 0; i < m_numColumns; ++i)
      y[i] = new int[m_numColumns];
  }

  // destructor
  ~myp()
  {
    for(int i = 0; i < m_numColumns; ++i)
      delete [] y[i];
    delete [] y;
  }

  // be careful of the copy ctor. I'm deleting it in this case!
  myp(const myp&) = delete;

  // edit: as per user4581301's suggestion
  myp() = delete;
  myp(myp&&) = delete; // remove move ctor
  myp& operator = (const myp&) = delete; // remove assignment
  myp& operator = (myp&&) = delete; // remove move assignment
};

int main()
{
   myp mp(5, 3);
   mp[1][1] = 3;
   cout << mp[1][1]<<endl;
   return 0;
}

关于c++ - 如何在类中初始化动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159229/

相关文章:

java - 如何删除java项目中未使用的类?

c++有没有一种方法可以在不中断他的工作的情况下有效地与线程通信

c++ - 通过指针读取文件

c++ - 数组错误的初始值设定项太多

javascript - 从对象数组中删除最后一个对象。

java - java中对象从数组中消失

c++ - 如何创建可以影响通过构造函数传递的对象的类变量?

c++ - C++17 引入的评估顺序保证是什么?

c++ - 将字符串与其缩写匹配

android - 如何在 android 中解决此错误 "com.android.internal.telephony cannot be resolved to a type"