Array in Struct trotz Initialisierung leer/size 0
-
Hallo Leute!
Ich programmiere seit ein paar Wochen mit C89 mit einem SDCC Compiler und habe ein Problem bei der Initalisierung eines Arrays in einem Struct.Hier meine Structs:
typedef struct tileColl{ UBYTE tileID; UBYTE collisionType; }TileCollisions; typedef struct tileSet{ UBYTE nbTiles; UBYTE tiles[]; TileCollisions collision[]; }Tileset;
hier ist eine Initialisierung eines Arrays von "Tileset"
const Tileset tilesetArray[]= { {//TestTileset// {79}, { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xFF,0xC0,0x80,0xBF,0x80,0xBF,0x80, 0xBF,0x80,0xBF,0x80,0xA0,0xDF,0xFF,0xFF, 0xFF,0xFF,0xF1,0x03,0x0D,0x01,0xFD,0x01, 0xF5,0x09,0xFD,0x01,0x8D,0x73,0xFF,0xFF, 0xFF,0xFF,0xF1,0x03,0x0D,0x01,0xFD,0x01, 0xF5,0x09,0xFD,0x01,0x3D,0xC3,0xFF,0xFF, 0xFF,0xFF,0x80,0xC0,0xBF,0x80,0xBF,0x80, 0xAF,0x90,0xBF,0x80,0xB0,0xCF,0xFF,0xFF, 0xFF,0xFF,0xC1,0xFF,0x90,0xFF,0x80,0xFF, 0x82,0xFF,0x80,0xFF,0xC0,0xFF,0xFF,0xFF, 0xFF,0xFF,0x03,0xFF,0x01,0xFF,0x01,0xFF, 0x21,0xFF,0x01,0xFF,0x03,0xFF,0xFF,0xFF, 0xFF,0xFF,0x83,0xFF,0x01,0xFF,0x05,0xFF, 0x01,0xFF,0x11,0xFF,0x03,0xFF,0xFF,0xFF, 0xFF,0xFF,0xC0,0xFF,0x80,0xFF,0x88,0xFF, 0x80,0xFF,0x80,0xFF,0xC0,0xFF,0xFF,0xFF, 0xFF,0xFF,0x02,0xFF,0x7F,0xFF,0x7F,0xFF, 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x86,0xFF,0xFE,0xFF,0xFE,0xFF, 0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x2F,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x86,0xFF,0xFE,0xFF,0xFE,0xFF, 0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x01,0x01,0x38,0x00,0xFF,0x00, 0xFF,0xFF,0xC4,0x3B,0x00,0xFF,0xFF,0xFF, 0x91,0x7E,0x10,0xFF,0xFF,0xFF,0xF8,0x07, 0x00,0xFF,0xFF,0xFF,0x93,0x7C,0x10,0xFF, 0xFF,0xFF,0xC0,0xC0,0x14,0x00,0xFF,0x00, 0xFF,0xFF,0x96,0xE9,0x80,0xFF,0xFF,0xFF, 0xE5,0x1E,0x04,0xFF,0xFF,0xFF,0x9C,0xE3, 0x80,0xFF,0xFF,0xFF,0x86,0x7D,0x04,0xFF, 0xFF,0xFF,0x01,0x01,0x38,0x00,0xFF,0x00, 0xFF,0xFF,0xC4,0x3B,0x00,0xFF,0xFF,0xFF, 0x91,0x7E,0x10,0xFF,0xFF,0xFF,0xF8,0x07, 0x00,0xFF,0xFF,0xFF,0x93,0x7C,0x10,0xFF, 0xFF,0xFF,0xC1,0xC1,0x15,0x01,0xFF,0x01, 0xFF,0xFF,0x97,0xE9,0x81,0xFF,0xFF,0xFF, 0xE4,0x1C,0x04,0xFC,0xFF,0xFF,0x9D,0xE3, 0x81,0xFF,0xFF,0xFF,0x84,0x7C,0x04,0xFC, 0xFF,0xFF,0x81,0x81,0xB8,0x80,0xFF,0x80, 0xFF,0xFF,0xC4,0xBB,0x80,0xFF,0xFF,0xFF, 0x11,0x1E,0x10,0x1F,0xFF,0xFF,0xF8,0x87, 0x80,0xFF,0xFF,0xFF,0x13,0x1C,0x10,0x1F, 0xFF,0xFF,0xC0,0xC0,0x14,0x00,0xFF,0x00, 0xFF,0xFF,0x96,0xE9,0x80,0xFF,0xFF,0xFF, 0xE5,0x1E,0x04,0xFF,0xFF,0xFF,0x9C,0xE3, 0x80,0xFF,0xFF,0xFF,0x86,0x7D,0x04,0xFF, 0x5E,0x01,0x0C,0x03,0x2C,0x03,0x1C,0x03, 0x2E,0x01,0x2A,0x05,0x1A,0x05,0x5C,0x03, 0x4E,0x01,0x0E,0x01,0x5A,0x05,0x0A,0x05, 0x28,0x07,0x2C,0x03,0x1E,0x01,0x5E,0x01, 0x7A,0x80,0x30,0xC0,0x34,0xC0,0x38,0xC0, 0x74,0x80,0x54,0xA0,0x58,0xA0,0x3A,0xC0, 0x72,0x80,0x70,0x80,0x5A,0xA0,0x50,0xA0, 0x14,0xE0,0x34,0xC0,0x78,0x80,0x7A,0x80, 0x70,0x80,0x54,0xA0,0x5C,0xA0,0x18,0xE0, 0x10,0xE0,0x31,0xC0,0x35,0xC0,0x75,0x80, 0x54,0xA0,0x5C,0xA0,0x58,0xA0,0x18,0xE0, 0x10,0xE0,0x34,0xC0,0x3D,0xC0,0x78,0x80, 0x0E,0x01,0x8A,0x05,0xA8,0x07,0x3C,0x03, 0x1C,0x03,0x0C,0x03,0x2E,0x01,0x3E,0x01, 0xBA,0x05,0x9A,0x05,0x8A,0x05,0xA8,0x07, 0x2C,0x03,0x3C,0x03,0x3C,0x03,0x9E,0x01, 0x00,0x00,0x00,0x00,0x1D,0x00,0x33,0x08, 0x73,0x08,0x6E,0x11,0xEE,0x11,0xEE,0x11, 0x00,0x00,0x40,0x20,0xC0,0x00,0x8C,0x42, 0x18,0x84,0x36,0x89,0xF5,0x0A,0xEA,0x14, 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00, 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00, 0xFA,0x05,0xF2,0x0D,0xF4,0x0A,0xE4,0x1A, 0x88,0x74,0x30,0xC8,0xC0,0x30,0x00,0xC0, 0x7F,0x80,0x7F,0x80,0x3F,0x40,0x3F,0x40, 0x1F,0x20,0x0F,0x10,0x03,0x0C,0x00,0x03, 0x00,0x03,0x03,0x0C,0x0F,0x10,0x13,0x20, 0x23,0x40,0x27,0x40,0x7F,0x80,0x7F,0x80, 0x00,0xC0,0xC0,0x30,0xF0,0x08,0xF8,0x04, 0xFC,0x02,0xFC,0x02,0xFE,0x01,0xFE,0x01, 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, 0xFA,0x05,0xF2,0x0D,0xF4,0x0B,0xE4,0x1B, 0x88,0x77,0x30,0xCF,0xC0,0x3F,0x00,0xFF, 0x7F,0x80,0x7F,0x80,0x3F,0xC0,0x3F,0xC0, 0x1F,0xE0,0x0F,0xF0,0x03,0xFC,0x00,0xFF, 0x00,0xFF,0x00,0xFF,0x04,0xFA,0x04,0xFA, 0x08,0xF4,0x30,0xC8,0xC0,0x30,0x00,0xC0, 0x00,0xFF,0x00,0xFF,0x00,0x7F,0x00,0x7F, 0x00,0x3F,0x00,0x1F,0x00,0x0F,0x00,0x03, 0x00,0xFF,0x04,0xFB,0x19,0xE6,0x33,0xCC, 0x6F,0x90,0x5F,0xA0,0xDE,0x21,0xBD,0x42, 0x00,0x00,0x04,0x00,0x19,0x00,0x33,0x08, 0x6F,0x10,0x5F,0x20,0xDE,0x21,0xBD,0x42, 0xBD,0x42,0xB9,0x46,0xBB,0x44,0xBB,0x44, 0xBB,0x44,0xBB,0x44,0x7B,0x84,0xFF,0x00, 0x22,0x00,0xCC,0x00,0x98,0x44,0xF0,0x08, 0x51,0xA8,0x6A,0x91,0xE5,0x12,0xED,0x12, 0xEB,0x14,0xE3,0x1C,0xDB,0x24,0xDF,0x20, 0xDF,0x20,0xFF,0x00,0xFF,0x00,0xFF,0x00, 0x22,0xDD,0xCC,0x33,0x98,0x67,0xF0,0x0F, 0x51,0xAE,0x6A,0x95,0xE5,0x1A,0xED,0x12, 0x00,0xFF,0x00,0x00,0xFF,0x00,0x39,0xC6, 0xD4,0xEF,0x02,0xFF,0x29,0xDF,0x10,0xFF, 0x82,0x7D,0x80,0x7F,0x22,0xDD,0xFF,0x00, 0xDF,0x20,0xFF,0x00,0x7E,0x81,0x1C,0xE3, 0x00,0xFF,0x00,0x00,0xFF,0x00,0xA7,0x58, 0x56,0xF9,0x89,0xFF,0x24,0xFF,0x02,0xFF, 0x00,0xFF,0x24,0xDB,0x6E,0x91,0xFF,0x00, 0xFF,0x00,0xFF,0x00,0x7C,0x83,0x54,0xAB, 0x00,0xF8,0x00,0x06,0xFC,0x01,0xA6,0x59, 0x56,0xF9,0x89,0xFF,0x25,0xFF,0x03,0xFF, 0x01,0xFF,0x59,0xA7,0x3F,0xC1,0xEF,0x11, 0xFF,0x01,0xFF,0x01,0xDD,0x23,0x09,0xF7, 0x00,0x7F,0x00,0x80,0x7F,0x80,0xB9,0xC6, 0xD4,0xEF,0x82,0xFF,0xA9,0xDF,0x90,0xFF, 0x82,0xFD,0x80,0xFF,0xA2,0xDD,0xFF,0x80, 0xDF,0xA0,0xFF,0x80,0xFE,0x81,0x9C,0xE3, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC6, 0x00,0xEF,0xC4,0x3B,0xE6,0x19,0xEF,0x10, 0x7D,0x00,0x7F,0x00,0xDD,0x00,0x00,0x00, 0x20,0x00,0x00,0x00,0x81,0x00,0xE3,0x00, 0x00,0xFF,0x00,0x00,0xFF,0x00,0xA7,0x58, 0x06,0xF9,0x50,0xAF,0xD9,0x26,0xFD,0x02, 0xFF,0x00,0xDB,0x00,0x91,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x83,0x00,0xAB,0x00, 0x00,0xF8,0x00,0x06,0xFC,0x01,0xA6,0x59, 0x06,0xF9,0x50,0xAF,0xD8,0x27,0xFC,0x03, 0xFE,0x01,0xA6,0x01,0xC0,0x01,0x10,0x01, 0x00,0x01,0x00,0x01,0x22,0x01,0xF6,0x01, 0x00,0x7F,0x00,0x80,0x7F,0x80,0x39,0xC6, 0x10,0xEF,0x64,0x9B,0x46,0x99,0x6F,0x90, 0x7D,0x80,0x7F,0x80,0x5D,0x80,0x00,0x80, 0x20,0x80,0x00,0x80,0x01,0x80,0x63,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, { {1,1}, {2,1}, {3,1}, {4,1}, {17,1}, {18,1}, {19,1}, {20,1}, {21,1}, {22,1}, {23,1}, {24,1}, {25,1}, {26,1}, {27,1}, {28,1}, {55,1}, {56,1}, {57,1}, {58,1}, {59,1}, {60,1}, {61,1}, {62,1}, {63,55}, {65,55}, {67,55}, {69,55} } } };
es geht um den letzten Teil des Arrays, also um die Collisions des ersten Tilesets.
Jedoch ist "TileCollisions" leer.sizeof(tilesetArray[0].collision))
zeigt 0, und ich habe keinen Zugriff auf die Elemente.
Hat da jemand eine Lösung?
Ich habs versucht mit Pointern zu lösen, aber der Compiler hat sehr viele Probleme damit. (Ich arbeite mit einem Compiler für den alten Gameboy)
Ich wäre für jeden Lösungsvorschlag dankbar.
-
Rail schrieb:
typedef struct tileColl{ UBYTE tileID; UBYTE collisionType; }TileCollisions; typedef struct tileSet{ UBYTE nbTiles; UBYTE tiles[];
error: flexible array member not at end of struct
Rail schrieb:
const Tileset tilesetArray[]= { {//TestTileset// {79},
warning: braces around scalar initializer
C89 und //? Das geht nicht gut.
-
Okay, vielen Dank!
Hast du eventuell auch einen Vorschlag wie ich es schreiben kann, dass ich beide Arrays nutzen kann?
-
Feste Größen oder Pointer... Was für Probleme hat denn dein Compiler mit Pointern?
-
Kein C Compiler hat Probleme mit Zeigern, egal wie alt er ist.
Das Problem sitzt immer vor dem Monitor.
FAM kann man nicht initialisieren. FAM sind C99.
Außer im 'obersten' Array musst du beim Typ immer die Größe vorgeben, d.h. deine anderen '[]' Versuche sind alle Müll.
-
^ Hm, wie sieht es dann hiermit aus?:
Die Structs:
#ifndef TILESET_H #define TILESET_H #include <gb\gb.h> typedef struct tileCollision { UBYTE tileID; UBYTE collisionType; }TileCollision; typedef struct tileset { UBYTE *tileArray; TileCollision *tileCollision; }Tileset; #endif
#include "C:\Users\nilsg\Dropbox\GameboyDev\jnr\tileset.h" /* General Tiles */ const UBYTE mainTiles[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xFF,0xC0,0x80,0xBF,0x80,0xBF,0x80, 0xBF,0x80,0xBF,0x80,0xA0,0xDF,0xFF,0xFF, 0xFF,0xFF,0xF1,0x03,0x0D,0x01,0xFD,0x01, 0xF5,0x09,0xFD,0x01,0x8D,0x73,0xFF,0xFF, 0xFF,0xFF,0xF1,0x03,0x0D,0x01,0xFD,0x01, 0xF5,0x09,0xFD,0x01,0x3D,0xC3,0xFF,0xFF, 0xFF,0xFF,0x80,0xC0,0xBF,0x80,0xBF,0x80, 0xAF,0x90,0xBF,0x80,0xB0,0xCF,0xFF,0xFF, 0xFF,0xFF,0xC1,0xFF,0x90,0xFF,0x80,0xFF, 0x82,0xFF,0x80,0xFF,0xC0,0xFF,0xFF,0xFF, 0xFF,0xFF,0x03,0xFF,0x01,0xFF,0x01,0xFF, 0x21,0xFF,0x01,0xFF,0x03,0xFF,0xFF,0xFF, 0xFF,0xFF,0x83,0xFF,0x01,0xFF,0x05,0xFF, 0x01,0xFF,0x11,0xFF,0x03,0xFF,0xFF,0xFF, 0xFF,0xFF,0xC0,0xFF,0x80,0xFF,0x88,0xFF, 0x80,0xFF,0x80,0xFF,0xC0,0xFF,0xFF,0xFF, 0xFF,0xFF,0x02,0xFF,0x7F,0xFF,0x7F,0xFF, 0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x86,0xFF,0xFE,0xFF,0xFE,0xFF, 0xFE,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x2F,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x86,0xFF,0xFE,0xFF,0xFE,0xFF, 0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xCB,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0x01,0x01,0x38,0x00,0xFF,0x00, 0xFF,0xFF,0xC4,0x3B,0x00,0xFF,0xFF,0xFF, 0x91,0x7E,0x10,0xFF,0xFF,0xFF,0xF8,0x07, 0x00,0xFF,0xFF,0xFF,0x93,0x7C,0x10,0xFF, 0xFF,0xFF,0xC0,0xC0,0x14,0x00,0xFF,0x00, 0xFF,0xFF,0x96,0xE9,0x80,0xFF,0xFF,0xFF, 0xE5,0x1E,0x04,0xFF,0xFF,0xFF,0x9C,0xE3, 0x80,0xFF,0xFF,0xFF,0x86,0x7D,0x04,0xFF, 0xFF,0xFF,0x01,0x01,0x38,0x00,0xFF,0x00, 0xFF,0xFF,0xC4,0x3B,0x00,0xFF,0xFF,0xFF, 0x91,0x7E,0x10,0xFF,0xFF,0xFF,0xF8,0x07, 0x00,0xFF,0xFF,0xFF,0x93,0x7C,0x10,0xFF, 0xFF,0xFF,0xC1,0xC1,0x15,0x01,0xFF,0x01, 0xFF,0xFF,0x97,0xE9,0x81,0xFF,0xFF,0xFF, 0xE4,0x1C,0x04,0xFC,0xFF,0xFF,0x9D,0xE3, 0x81,0xFF,0xFF,0xFF,0x84,0x7C,0x04,0xFC, 0xFF,0xFF,0x81,0x81,0xB8,0x80,0xFF,0x80, 0xFF,0xFF,0xC4,0xBB,0x80,0xFF,0xFF,0xFF, 0x11,0x1E,0x10,0x1F,0xFF,0xFF,0xF8,0x87, 0x80,0xFF,0xFF,0xFF,0x13,0x1C,0x10,0x1F, 0xFF,0xFF,0xC0,0xC0,0x14,0x00,0xFF,0x00, 0xFF,0xFF,0x96,0xE9,0x80,0xFF,0xFF,0xFF, 0xE5,0x1E,0x04,0xFF,0xFF,0xFF,0x9C,0xE3, 0x80,0xFF,0xFF,0xFF,0x86,0x7D,0x04,0xFF, 0x5E,0x01,0x0C,0x03,0x2C,0x03,0x1C,0x03, 0x2E,0x01,0x2A,0x05,0x1A,0x05,0x5C,0x03, 0x4E,0x01,0x0E,0x01,0x5A,0x05,0x0A,0x05, 0x28,0x07,0x2C,0x03,0x1E,0x01,0x5E,0x01, 0x7A,0x80,0x30,0xC0,0x34,0xC0,0x38,0xC0, 0x74,0x80,0x54,0xA0,0x58,0xA0,0x3A,0xC0, 0x72,0x80,0x70,0x80,0x5A,0xA0,0x50,0xA0, 0x14,0xE0,0x34,0xC0,0x78,0x80,0x7A,0x80, 0x70,0x80,0x54,0xA0,0x5C,0xA0,0x18,0xE0, 0x10,0xE0,0x31,0xC0,0x35,0xC0,0x75,0x80, 0x54,0xA0,0x5C,0xA0,0x58,0xA0,0x18,0xE0, 0x10,0xE0,0x34,0xC0,0x3D,0xC0,0x78,0x80, 0x0E,0x01,0x8A,0x05,0xA8,0x07,0x3C,0x03, 0x1C,0x03,0x0C,0x03,0x2E,0x01,0x3E,0x01, 0xBA,0x05,0x9A,0x05,0x8A,0x05,0xA8,0x07, 0x2C,0x03,0x3C,0x03,0x3C,0x03,0x9E,0x01, 0x00,0x00,0x00,0x00,0x1D,0x00,0x33,0x08, 0x73,0x08,0x6E,0x11,0xEE,0x11,0xEE,0x11, 0x00,0x00,0x40,0x20,0xC0,0x00,0x8C,0x42, 0x18,0x84,0x36,0x89,0xF5,0x0A,0xEA,0x14, 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00, 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00, 0xFA,0x05,0xF2,0x0D,0xF4,0x0A,0xE4,0x1A, 0x88,0x74,0x30,0xC8,0xC0,0x30,0x00,0xC0, 0x7F,0x80,0x7F,0x80,0x3F,0x40,0x3F,0x40, 0x1F,0x20,0x0F,0x10,0x03,0x0C,0x00,0x03, 0x00,0x03,0x03,0x0C,0x0F,0x10,0x13,0x20, 0x23,0x40,0x27,0x40,0x7F,0x80,0x7F,0x80, 0x00,0xC0,0xC0,0x30,0xF0,0x08,0xF8,0x04, 0xFC,0x02,0xFC,0x02,0xFE,0x01,0xFE,0x01, 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, 0xFA,0x05,0xF2,0x0D,0xF4,0x0B,0xE4,0x1B, 0x88,0x77,0x30,0xCF,0xC0,0x3F,0x00,0xFF, 0x7F,0x80,0x7F,0x80,0x3F,0xC0,0x3F,0xC0, 0x1F,0xE0,0x0F,0xF0,0x03,0xFC,0x00,0xFF, 0x00,0xFF,0x00,0xFF,0x04,0xFA,0x04,0xFA, 0x08,0xF4,0x30,0xC8,0xC0,0x30,0x00,0xC0, 0x00,0xFF,0x00,0xFF,0x00,0x7F,0x00,0x7F, 0x00,0x3F,0x00,0x1F,0x00,0x0F,0x00,0x03, 0x00,0xFF,0x04,0xFB,0x19,0xE6,0x33,0xCC, 0x6F,0x90,0x5F,0xA0,0xDE,0x21,0xBD,0x42, 0x00,0x00,0x04,0x00,0x19,0x00,0x33,0x08, 0x6F,0x10,0x5F,0x20,0xDE,0x21,0xBD,0x42, 0xBD,0x42,0xB9,0x46,0xBB,0x44,0xBB,0x44, 0xBB,0x44,0xBB,0x44,0x7B,0x84,0xFF,0x00, 0x22,0x00,0xCC,0x00,0x98,0x44,0xF0,0x08, 0x51,0xA8,0x6A,0x91,0xE5,0x12,0xED,0x12, 0xEB,0x14,0xE3,0x1C,0xDB,0x24,0xDF,0x20, 0xDF,0x20,0xFF,0x00,0xFF,0x00,0xFF,0x00, 0x22,0xDD,0xCC,0x33,0x98,0x67,0xF0,0x0F, 0x51,0xAE,0x6A,0x95,0xE5,0x1A,0xED,0x12, 0x00,0xFF,0x00,0x00,0xFF,0x00,0x39,0xC6, 0xD4,0xEF,0x02,0xFF,0x29,0xDF,0x10,0xFF, 0x82,0x7D,0x80,0x7F,0x22,0xDD,0xFF,0x00, 0xDF,0x20,0xFF,0x00,0x7E,0x81,0x1C,0xE3, 0x00,0xFF,0x00,0x00,0xFF,0x00,0xA7,0x58, 0x56,0xF9,0x89,0xFF,0x24,0xFF,0x02,0xFF, 0x00,0xFF,0x24,0xDB,0x6E,0x91,0xFF,0x00, 0xFF,0x00,0xFF,0x00,0x7C,0x83,0x54,0xAB, 0x00,0xF8,0x00,0x06,0xFC,0x01,0xA6,0x59, 0x56,0xF9,0x89,0xFF,0x25,0xFF,0x03,0xFF, 0x01,0xFF,0x59,0xA7,0x3F,0xC1,0xEF,0x11, 0xFF,0x01,0xFF,0x01,0xDD,0x23,0x09,0xF7, 0x00,0x7F,0x00,0x80,0x7F,0x80,0xB9,0xC6, 0xD4,0xEF,0x82,0xFF,0xA9,0xDF,0x90,0xFF, 0x82,0xFD,0x80,0xFF,0xA2,0xDD,0xFF,0x80, 0xDF,0xA0,0xFF,0x80,0xFE,0x81,0x9C,0xE3, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC6, 0x00,0xEF,0xC4,0x3B,0xE6,0x19,0xEF,0x10, 0x7D,0x00,0x7F,0x00,0xDD,0x00,0x00,0x00, 0x20,0x00,0x00,0x00,0x81,0x00,0xE3,0x00, 0x00,0xFF,0x00,0x00,0xFF,0x00,0xA7,0x58, 0x06,0xF9,0x50,0xAF,0xD9,0x26,0xFD,0x02, 0xFF,0x00,0xDB,0x00,0x91,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x83,0x00,0xAB,0x00, 0x00,0xF8,0x00,0x06,0xFC,0x01,0xA6,0x59, 0x06,0xF9,0x50,0xAF,0xD8,0x27,0xFC,0x03, 0xFE,0x01,0xA6,0x01,0xC0,0x01,0x10,0x01, 0x00,0x01,0x00,0x01,0x22,0x01,0xF6,0x01, 0x00,0x7F,0x00,0x80,0x7F,0x80,0x39,0xC6, 0x10,0xEF,0x64,0x9B,0x46,0x99,0x6F,0x90, 0x7D,0x80,0x7F,0x80,0x5D,0x80,0x00,0x80, 0x20,0x80,0x00,0x80,0x01,0x80,0x63,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; const TileCollision generalTileColl[]= { {1,1}, {2,1}, {3,1}, {4,1}, {17,1}, {18,1}, {19,1}, {20,1}, {21,1}, {22,1}, {23,1}, {24,1}, {25,1}, {26,1}, {27,1}, {28,1}, {55,1}, {56,1}, {57,1}, {58,1}, {59,1}, {60,1}, {61,1}, {62,1}, {63,55}, {65,55}, {67,55}, {69,55} }; const Tileset generalTileset = { mainTiles, generalTileColl };
bin mir gerade nicht sicher, ob das so richtig ist, was die Initialisierung ganz unten angeht.
Jedenfalls kriege ich den Fehler:tileset.c(190):warning *** Initializer different levels of indirections
-
Das eine ist const-qualified (globale Variablen) und das andere nicht (struct member). Entweder beide oder keines.
-
Das heißt also, ich muss sowohl die Members im Struct als "const" sowie die Deklarationen dieser mit "const" versehen?
Ich kriege allerdings noch immer den gleichen Fehler.
typedef const struct tileCollision { const UBYTE tileID; const UBYTE collisionType; }TileCollision; typedef const struct tileset { const UBYTE *tileArray; const TileCollision *tileCollision; }Tileset;
const UBYTE mainTiles[] = { [...] }; const TileCollision generalTileColl[]= { [...] }; const Tileset generalTileset = { mainTiles, generalTileColl };
-
Von Deklaration schrieb ich doch nichts. Ich meinte:
typedef struct tileCollision { UBYTE tileID; UBYTE collisionType; }TileCollision; typedef struct tileset { const UBYTE *tileArray; const TileCollision *tileCollision; }Tileset;
Daran liegt es jedoch anscheinend nicht. Die Warnung passt auch irgendwie nicht dazu (Zeile 190!?). Dein Compiler beherrscht anscheined kein ANSI bzw. ISO C. Ansonsten probiere doch mal const ganz weg zu lassen (wenn du das willst) oder explizite Casts:
const Tileset generalTileset = { (const UBYTE *)mainTiles, (const TileCollision *)generalTileColl };
Ignorieren, da es nur eine (wahrscheinlich falsche) Warnung ist, wäre auch noch eine Lösung.
-
Ich denke mir auch, dass die Warnung eventuell falsch ist.
Das Ding ist aber, dass
printf("%u",(unsigned int)generalTileset.tileCollision[1].tileID);
bspw. immer 0 ausgibt, egal was ich als Index angebe.
-
Rail schrieb:
Ich denke mir auch, dass die Warnung eventuell falsch ist.
Quatsch.
Der Compiler gibt keine falschen Warnungen.
Er warnt vor Unsinn, und ein (const...) Cast ist z.B. solch ein Unsinn, den Anfänger häufig machen um Warnungen zu unterdrücken.
-
Dann sag doch mal, wo der Fehler liegt. Der verwendete Compiler kann anscheinend nicht
const type *
mit einem Ausdruck vom Typconst type [n]
initialisieren. Das sollte doch möglich sein?Folgendes fällt mir noch ein.
const Tileset generalTileset = { mainTiles + 0, generalTileColl + 0 };
Ansonsten mal Compiler aktualisieren, falls möglich.
-
Den Compiler kann ich leider nicht aktualisieren
const Tileset generalTileset = { mainTiles + 0, generalTileColl + 0 };
Hilft leider auch nicht ...
Dann muss ich wohl eine andere Lösung finden.
Trotzdem vielen Dank für eure Hilfen!
-
Ich kann mir das noch nicht so recht vorstellen...
Nur damit wir mal eine gemeinsame Basis haben:
Was sagt denn Dein Compiler zur folgenden Minimalversion?#include <stdio.h> typedef unsigned char UBYTE; typedef struct tileCollision { UBYTE tileID; UBYTE collisionType; }TileCollision; typedef struct tileset { UBYTE *tileArray; TileCollision *tileCollision; }Tileset; UBYTE mainTiles[] = { 0,1,2,3,4,5,6,7,8,9 }; TileCollision generalTileColl[]= { {1,1}, {1,2}, {2,1}, {2,2}, }; Tileset generalTileset = { mainTiles, generalTileColl }; int main(void){ TileCollision *tc; tc=&generalTileset.tileCollision[1]; printf("%u %u\n",tc->tileID, tc->collisionType); /* 1 2 */ return 0; }
Die Warnungen werden ja wieder kommen...Und die Ausgabe ist dann was?
-
Er gibt
1 2
aus, wie du sagtest...
Okay, gerade was herausgefunden:
Wenn ich das "const" wegmache, also alles im RAM ist, funktioniert es.
Wenn ich das ganze mit "const" also in den ROM packe, geht es schief.