質問です。
構造体の中に配列を宣言してプログラムを行っているのですが、
コンパイルは通ってもリンクが通らないという事態に陥ってしまいました。
リンクエラーメッセージは Symbol "_LED_YKK_AIRSHIP_P1_n" size mismatch.
です。
プログラムは以下のとおりです。
struct LED_normal{
const short frame;
const unsigned char speed;
unsigned char dat[/url][40];
};
struct LED_normal LED_YKK_AIRSHIP_P1_n = {
70,
2,
{
{255,255,255,255,255,255,255,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//1
{242,242,242,242,242,242,242,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,},//2
{229,229,229,229,229,229,229,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//3
・
・
・
};
どなたかいい方法をお教えくださいませんか。
配列の構造体についての質問
Re:配列の構造体についての質問
構造体メンバに不確定のサイズを指定することはできません。
(コンパイル時にサイズが確定できない為)
提示されたデータ構造にしなければいけない背景を提示頂ければ違うアプローチでもっと簡単に記述できる
アドバイスができるかもしれません。
(コンパイル時にサイズが確定できない為)
struct LED_normal{ const short frame; const unsigned char speed; unsigned int dat_size; unsigned char** dat; }; として動的に値を入れていくしかありません。 int main() { const int n = 10; // データサイズ const unsigned char data[n][40] = { {255,255,255,255,255,255,255,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//1 {242,242,242,242,242,242,242,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,},//2 {229,229,229,229,229,229,229,255,0,0,255,0,0,174,0,239,174,0,239,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},//3 ・ ・ ・ }; struct LED_normal LED_YKK_AIRSHIP_P1_n = { 70, 2, n, NULL, }; LED_YKK_AIRSHIP_P1_n.dat = (unsigned char**)malloc(sizeof(unsigned char*) * LED_YKK_AIRSHIP_P1_n.data_size); for( int i = 0; i<LED_YKK_AIRSHIP_P1_n.data_size; i++ ) { LED_YKK_AIRSHIP_P1_n.dat = (unsigned char*)malloc(sizeof(unsigned char)*40); memcpy(LED_YKK_AIRSHIP_P1_n.dat, data, sizeof(unsigned char)*40); } // 終了処理 for( int i = 0; i<LED_YKK_AIRSHIP_P1_n.data_size; i++ ) { free(LED_YKK_AIRSHIP_P1_n.dat); } free(LED_YKK_AIRSHIP_P1_n.dat); return 0; }
提示されたデータ構造にしなければいけない背景を提示頂ければ違うアプローチでもっと簡単に記述できる
アドバイスができるかもしれません。