非静态数据成员的使用无效

Invalid use of non static data member

本文关键字:无效 静态 数据成员      更新时间:2023-10-16
class matrix
{
   public:
     int m;
     int n;
     int mat[m][n];
};  

我收到此错误:

[错误]:无效使用非静态数据成员"矩阵::n">
声明静态时:

class matrix
{
   public:
     static int m;
     static int n;
     int mat[m][n];    //Error
};  

我收到此错误:

[错误]:数组绑定不是 ']' 标记
之前的整数常量 请告诉我这些错误的含义以及如何解决此问题。

C++数组的大小必须是编译时可评估的。

编译器不知道如何处理int mat[m][n];,因为在编译时不知道mn的值。

如果你想要一个好的可靠矩阵类,那么请考虑在 Boost 中使用 BLAS 库。std::vector<std::vector<int>>可以工作,但它是一个锯齿状边缘矩阵,内存模型相当差。

问题是,当你声明mat成员变量时,mn实际上并不存在。在创建 matrix 类的实例之前,它们不存在。但是,这不会有多大好处,因为C++中的数组在编译时必须具有固定的大小。

如果要在运行时设置mat的大小,那么此处的简单解决方案是使用std::vector对象的std::vector

比如

std::vector<std::vector<int>> mat;