【问题标题】:Invalid use of non static data member非静态数据成员的无效使用
【发布时间】:2015-12-10 08:36:39
【问题描述】:
class matrix
{
   public:
     int m;
     int n;
     int mat[m][n];
};  

我得到这个错误:

[错误]:非静态数据成员'matrix::n'的使用无效
关于声明静态:

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

我得到这个错误:

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

【问题讨论】:

  • 请不要仅仅因为您认为答案是显而易见的而对问题投反对票。恕我直言,这个问题提出的很好。

标签: c++ class oop


【解决方案1】:

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

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

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

【讨论】:

  • 非常有价值,你用向量的向量拼出警告。
【解决方案2】:

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

如果您想在运行时设置mat 的大小,那么这里的简单解决方案是使用std::vectorstd::vector 对象。

比如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2016-01-12
    • 2023-03-12
    • 2013-10-14
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多