通过乘以两个值来定义char数组

时间:2014-06-05 05:00:36

标签: c++ arrays char

我有以下代码,但编译器在定义数组时会返回Invalid use of non-static data member 'columns'

int columns = 10;
int rows = 13;
char characters[columns * rows];

如果我将其更改为:

#define COLS 10;
#define ROWS 13;
int columns = COLS;
int rows = ROWS;
char characters[COLS * ROWS];

我得到Expected member name or ';' after declaration specifiers

这只有在我通过手动输入数字来声明我的数组时才有效:

char characters[10 * 13];

......但当然这是多余的;我不想在两个地方定义我的cols和行。我的印象是预编译器指令是编译器的简单搜索/替换,所以我不明白为什么char characters[COLS * ROWS]不起作用,这样做char characters[10 * 13]

处理这个问题的正确方法是什么?

PS:我正在使用Xcode 5.1.1和OpenFrameworks项目。

2 个答案:

答案 0 :(得分:5)

如果您将;附加到宏,那么您也会在扩展中获得;

即,

#define COLS 10;
#define ROWS 13;
char characters[COLS*ROWS];

扩展为

char characters[10;*13;];

将无法编译。丢弃分号,你很高兴。

#define COLS 10
#define ROWS 13

答案 1 :(得分:2)

数组维度必须是常量表达式:

const int columns = 10;
const int rows = 13;
char characters[columns * rows];

请注意使用const

#define;

而无法工作的人
#define COLS 10;

应该是

#define COLS 10