2016-02-13 8 views
-1

Я создаю функцию, которая примет параметр char и преобразует его в массив bool [8] [8]. Вот что моя функция выглядит как прямо сейчас:Переназначение многомерного массива в C++

void DotMatrix::displayCharacter(char c, bool doScrolling, int milliseconds){ 
bool pixelMap[8][8]; 
if (c == 'A'){ 
    pixelMap = { 
     {0,0,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,1,1,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'B'){ 
    pixelMap = { 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,1,1,0,0,0} 
    }; 
} else if (c == 'C'){ 
    pixelMap = { 
     {0,0,0,1,1,0,0,0}, 
     {0,0,1,0,0,1,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,0,1,0,0,1,0,0}, 
     {0,0,0,1,1,0,0,0} 
    }; 
} else if (c == 'D'){ 
    pixelMap = { 
     {0,1,1,1,0,0,0,0}, 
     {0,1,0,0,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,1,0,0,0}, 
     {0,1,1,1,0,0,0,0} 
    }; 
} else if (c == 'E'){ 
    pixelMap = { 
     {0,1,1,1,1,1,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,1,1,1,1,0,0} 
    }; 
} else if (c == 'F'){ 
    pixelMap = { 
     {0,1,1,1,1,1,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0} 
    }; 
} else if (c == 'G'){ 
    pixelMap = { 
     {0,0,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,1,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,1,1,0,0,0} 
    }; 
} else if (c == 'H'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,1,1,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'I'){ 
    pixelMap = { 
     {0,1,1,1,1,1,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,1,1,1,1,1,0,0} 
    }; 
} else if (c == 'J'){ 
    pixelMap = { 
     {0,0,0,0,1,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,1,1,0,0,0} 
    }; 
} else if (c == 'K'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,1,0,0,0}, 
     {0,1,0,1,0,0,0,0}, 
     {0,1,1,0,0,0,0,0}, 
     {0,1,0,1,0,0,0,0}, 
     {0,1,0,0,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'L'){ 
    pixelMap = { 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,1,1,1,1,0,0} 
    }; 
} else if (c == 'M'){ 
    pixelMap = { 
     {0,1,1,0,1,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'N'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,0,0,1,0,0}, 
     {0,1,1,0,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,0,1,1,0,0}, 
     {0,1,0,0,1,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'O'){ 
    pixelMap = { 
     {0,0,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,1,1,0,0,0} 
    }; 
} else if (c == 'P'){ 
    pixelMap = { 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0} 
    }; 
} else if (c == 'Q'){ 
    pixelMap = { 
     {0,0,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,0,1,1,0,0}, 
     {0,0,1,1,1,0,1,0} 
    }; 
} else if (c == 'R'){ 
    pixelMap = { 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,1,1,1,0,0,0}, 
     {0,1,0,1,0,0,0,0}, 
     {0,1,0,0,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'S'){ 
    pixelMap = { 
     {0,0,1,1,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,0,1,1,1,0,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,1,1,0,0,0} 
    }; 
} else if (c == 'T'){ 
    pixelMap = { 
     {0,1,1,1,1,1,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0} 
    }; 
} else if (c == 'U'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,1,1,1,0,0} 
    }; 
} else if (c == 'V'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0} 
    }; 
} else if (c == 'W'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,0,1,0,1,0,0}, 
     {0,1,1,0,1,1,0,0} 
    }; 
} else if (c == 'X'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0} 
    }; 
} else if (c == 'Y'){ 
    pixelMap = { 
     {0,1,0,0,0,1,0,0}, 
     {0,1,0,0,0,1,0,0}, 
     {0,0,1,0,1,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0} 
    }; 
} else if (c == 'Z'){ 
    pixelMap = { 
     {0,1,1,1,1,1,0,0}, 
     {0,0,0,0,0,1,0,0}, 
     {0,0,0,0,1,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,0,1,0,0,0,0}, 
     {0,0,1,0,0,0,0,0}, 
     {0,1,0,0,0,0,0,0}, 
     {0,1,1,1,1,1,0,0} 
    }; 
} else if (c == ' '){ 
    pixelMap = { 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0}, 
     {0,0,0,0,0,0,0,0} 
    }; 
} 
if (doScrolling == 1){ 
    scrollPixels(milliseconds, pixelMap); 
} else { 
    displayPixels(milliseconds, pixelMap); 
} 

} Однако, когда я запускаю этот код в моей программе, она возвращает:

error: assigning to an array from an initializer list 

ответ

2

Рассмотрим гораздо лучший подход:

bool pixelmap[26][8][8] = { 
    { 
    {0,0,1,1,1,0,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,1,1,1,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0} 
    }, 

    // No, no need to repeat everything. 
}; 

if (c >= 'A' && c <= 'Z') 
{ 
    auto p=pixelmap[c-'A']; 

    // ... 
} 

Нет необходимости копировать или назначить что-нибудь.

+0

Будет ли это загружать 26 массивов 8x8, по существу? Потому что у меня ограничено около 2048 байт ОЗУ. –

+0

Ну, да. Массивы не появляются из воздуха. Технически это единый трехмерный массив, 26x8x8, который благодаря современной математике займет ровно столько же пространства, сколько 26 отдельных массивов 8x8. И, если вы объявите его статичным, он даже не будет потреблять ваше пространство в стеке! Плюс в качестве дополнительного бонуса, если вы закажете сейчас, вы сэкономите стоимость выполнения 26 последовательных сравнений, и вместо этого вы получите одно, маленькое математическое выражение. Какая сделка! –

+0

Я думаю, что все, что ему нужно, это 26 * 8 * 8 байтов – macroland

0

Вы не можете явно присвоить значение массива во время используя список инициализаторов.

Попробуйте это:

auto tempMap = std::initializer_list<bool>({ 
    {0,0,1,1,1,0,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,1,1,1,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}, 
    {0,1,0,0,0,1,0,0}); 
std::copy(tempMap.begin(), tempMap.end(), pixelMap); 

Если вы в конечном итоге только собираетесь написать это в буфер кадра видео, следует использовать символ вместо BOOL. Это будет упрощать вещи совсем немного, если ваш код не будет выглядеть, как изящная;)

+0

мой плохой, скопируйте вздор. Исправлено, спасибо @SamVarshavchik –

+0

Проблема в том, что я использую arduino, поэтому я не могу использовать стандартную библиотеку, как в обычном C++, поэтому я пытался найти способ обойти это. Однако, как еще одна альтернатива, было бы возможно простой цикл через все значения и переназначить каждый из них? –

+0

Да, вы можете это сделать, просто много работы lol –

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