读书人

类内定义二维数组有关问题

发布时间: 2013-08-01 15:23:18 作者: rapoo

类内定义二维数组问题
class A{

private:
const int N;
int (*a)[N];
};

在函数体中:const int N=0; int (*a)[N];这样的定义是绝对没问题的。
在类中:

我已经定义N为const了,为什么C++仍然不允许我定义一个(指向列数为N的二维数组的)指针?

在创建一个对象实例时,肯定是要为N初始化的,而且一但初始化后其值是不能改变的,所以二维数组

的列数肯定也是固定的。

大家帮忙分析分析为啥这种形式不被编译器认可?或者它有什么危害?

C++
[解决办法]
Boost中有multi_array可以用
[解决办法]
const int N这样不行的
改成
static const int N = 10;
或者
enum {N = 10};

[解决办法]
虽然你是常数, 但是要等到对象构造的时候才初始化, 已经是运行期的事情了.
加了 const 不一定就是编译期的常量.
数组下标需要是编译时候的常量. (不支持新标准的可变数组的情况下)
[解决办法]
目前最流行的旧标准中,数组的大小必须在编译器确定
你定义了const,只代表这个数值在一定环境内不允许改变,不等于这个数值在程序编译时就已确定
跟你用什么关键词用什么语法绕多少个弯都没关系,就一个问题,你这个数组的大小是不是程序运行前就已确定?是就可以,不是就不行。

动态大小的数据集合,可以自己new,也可以使用标准库
至于二维数组,个人建议彻底抛弃多维数组,只使用一维数组
[解决办法]
1)class A{
private:
static const int N=10;
int (*a)[N];
};
2) template<int N>class A{
private:
int (*a)[N];
};
3) 二维数组,最好用int ** p;定义然后至少申请2次内存。
4)二维数组,也可以直接一位数组,表示二维数组.

读书人网 >C++

热点推荐