2015-02-20 2 views
-1

Я пытаюсь инициализировать одномерный массив в качестве переменной-члена внутри класса, но я получаю сообщение об ошибке ожидается выражениеошибка: ожидается выражение, прежде чем {в C++

здесь объявление в файле tetris.h :

private: 
    int* rotate(char piece,int rot); 

    int width; 
    int* heights; 
    char* data[0]; 
    const string blockkeys; 
    int *blocks; 
}; 

и вот конструктор:

Tetris::Tetris(int w):blockkeys("IOJLZST"){ 
blocks = new int[7*4*2]={ 
    0,0,0,1,0,2,0,3, 
    0,0,0,1,1,1,1,0, 
    0,0,1,0,1,1,1,2, 
    0,0,1,0,0,1,0,2, 
    0,0,1,0,0,1,-1,1, 
    0,0,1,0,1,1,2,1, 
    0,0,-1,1,1,1,2,1}; 
width=w; 
heights=new int[width]; 
char *data[width]; 
for (unsigned int i=0; i<width; ++i){ 
    data[i]=new char[0]; 
    heights[i]=0; 
} 
} 

ошибка сразу же происходит после того, как "новый INT [7 * 4 * 2] =" и перед "{"

+0

блоки не являются массивом нулевой длины. –

+0

@ DanG., Но 'данные' есть. – chris

+1

'new int [7 * 4 * 2]' не является значением lvalue. Почему вы назначаете его? – chris

ответ

2

Вы проверили синтаксис? Я боюсь, что «new int [7 * 4 * 2] = anything» не является допустимым инициализирующим выражением в C++.

Также объявление массива нулевой длины недопустимо.

EDIT После OP объяснения:

Попробуйте объявить массив статический:

class Tetris { 
    .... 
    static int blocks[7*4*2]; 
}; 


int Tetris::blocks[7*4*2]={ 
    0,0,0,1,0,2,0,3, 
    0,0,0,1,1,1,1,0, 
    0,0,1,0,1,1,1,2, 
    0,0,1,0,0,1,0,2, 
    0,0,1,0,0,1,-1,1, 
    0,0,1,0,1,1,2,1, 
    0,0,-1,1,1,1,2,1}; 

затем использовать blocks в Tetris функции-члены.

+0

Есть ли способ создать экземпляр этой переменной-члена без перебора и присвоения каждому индексу нужного числа. Я изменил его на 'new int [56]' и он все еще не работает –

+2

@DanG. Проблема заключается в двух символах '=', а не в умножении – Angew

+0

@Angew, так как я могу инициализировать этот массив в одной строке кода? Я не хочу, чтобы итерации через все 56 пунктов –

Смежные вопросы