我有以下代码,但编译器在定义数组时会返回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项目。
答案 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