首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中使用"new“命令在类构造函数中分配二维数组

在c++中使用"new“命令在类构造函数中分配二维数组
EN

Stack Overflow用户
提问于 2019-09-12 01:18:05
回答 2查看 97关注 0票数 0

我正试着用c++写一个我自己的矩阵类。我想使用new运算符为此分配堆内存。下面是类代码片段,这抛出了错误:

代码语言:javascript
复制
  class Matrix
    {
        private:
            int *m_ptr;
            const int m_size;
        public:
            Matrix():m_size(2)
            {
                new int[m_size][m_size];//testing this statement
            }   

            ~Matrix()
            {
                delete[] m_ptr;
            }
    };

错误:

代码语言:javascript
复制
main.cc: In constructor ‘Matrix::Matrix()’:
main.cc:11:26: error: array size in new-expression must be constant
    new int[m_size][m_size];//testing this statement
                          ^
main.cc:11:26: error: ‘this’ is not a constant expression
EN

回答 2

Stack Overflow用户

发布于 2019-09-12 01:19:57

m_size必须是常量表达式。不一定是const合格的。

您可以尝试将其设置为constexpr (但这意味着它是静态的):

代码语言:javascript
复制
static constexpr int m_size = 2;

或者使用模板:

代码语言:javascript
复制
template<size_t m_size>
class Matrix {
private:
    int *m_ptr;
public:
    Matrix(){
        new int[m_size][m_size];//testing this statement
    }   
    ~Matrix(){
        delete[] m_ptr;
    }
};

int main() {
    Matrix<2> m;
}
票数 0
EN

Stack Overflow用户

发布于 2019-09-12 16:06:00

如果找到方括号[],新的表达式和声明将向右展开,并且没有括号来更改顺序,如果有括号,则向外展开。

代码语言:javascript
复制
 new int[A][B];

这意味着分配int[B]类型的A元素。A可以是变量,但B不能,它是类型定义的一部分。用一个新的表达式来分配二维数组的问题通常是无法用语法手段解决的。

多维数组本身并没有定义为一种类型。我们有对象和对象数组。2D数组是对象的数组,这些对象是数组。由于您不能分配动态类型的对象数组,只能分配静态类型的对象数组,因此无法执行您想要的操作。相反,您需要一个类包装器,它通过重新定义operator[]将简单的数组视为二维数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57893981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档