2016-02-25 3 views
-4

Когда я пытаюсь скомпилировать следующее:Переменная не будет работать в случае переключения

bool matrix[h][w];

bool c = 0; 
switch(1) // was close? 
{ 
    case matrix[y][x-1]: // up 1 
    case matrix[y-2][x-1]: // down 1 
    case matrix[y-1][x]: // right 1 
    case matrix[y][x-2]: // left 1 
    c = 1; 
    break; 
} 

возвращает the value of 'matrix' is not usable in a constant expression. Что я делаю не так?

+6

Возможно, вы неправильно поняли, что делает оператор 'switch'. – Zereges

+0

«Возможно».? : D –

+0

@Krii, что вы хотите сделать? – Ajay

ответ

7

Выражения, используемые в операциях case, должны быть константами времени компиляции. Вы можете использовать:

case 1: 

case 2: 

и т.д., не

case matrix[y][x-1]: // up 1 

case matrix[y-2][x-1]: // down 1 

Кроме того, операнд переключателя() должен быть переменной во время выполнения, а не компиляции постоянная времени. Например, switch(matrix[y][x-1]) будет в порядке.

+1

Кроме того, операнд 'switch()' должен быть переменной времени выполнения, а не константой времени компиляции. Например, 'switch (matrix [y] [x-1])' будет в порядке. – BingsF