2d array pointer
-
Kann mir mal wer bei der Syntax heilfen?
ich habs jetzt simplifiziert so:const char* array[][5] = { {"asd","erf","sdf","234","asdas"}, {"asd","erf","sdf","234","asdas"}, {"asd","erf","sdf","234","asdas"}, } class foo { public: foo(void* foo2give, int asd2give) { asd = asd2give; foo = foo2give; } void* p_array; int asd; }; foo vielebunte_foo[]= { foo(array, 12), foo(array, 34), }; void funktion(const char* data[][5] p_array) { cout<<p_array[1][1]; // usw } void aufrufer(void) { funktion(const char*(*)[5])(vielebunte_foo[1].p_array); }
Meine Frage:
wie funktioniert das ganze ohne void* & cast?
Wäre um einiges besser, aber ich hab so ziemlich alle syntaxkombinationen durch und der will einfach nicht =[*edit* hey wo waren die codetags hin
[ Dieser Beitrag wurde am 04.04.2003 um 08:31 Uhr von dreaddy editiert. ]
-
hmmm...irgendwie erschließt sich mir der Sinn nicht...
Vielleicht erklärst du erst mal, welche Funktion der Code erfüllen soll...
-
Naja der Sinn tut eigentlich recht wenig zur Sache, ich will nur wissen was ich statt den void* tippen kann, aber es ist eine Datei zum Erstellen einer mysql Datenbank.
array sind die einzelnen Tabellen mit den Werten(typ, grösse, signed/unsigned usw)
vielebunte_foo ist eine Zusammenfassung von tabellenwerte, tabellenname, Primärschlüssel usw
aufrufer() ist eine Schleife die alle vielebunte_foo durchackert
und funktion() erstellt die eigentliche Tabelle
-
class foo { public: foo(void* foo2give, int asd2give) { asd = asd2give; foo = foo2give; // <= was soll das denn??? } void* p_array; int asd; };
-
class foo { public: foo(char *** foo2give, int asd2give) { asd = asd2give; foo = foo2give; } char *** p_array; // zu greifen daruf kanns du mit // std::cout << p_array[0][0] << endl; int asd; };
-
thx aber das will net
ich poste nomma die originalversion:
const char* s_char = "1"; const char* s_short = "2"; const char* s_long = "4"; const char* s_longlong = "8"; const char* size_tabellen_erstellen = "5"; // also erstmal die datensätze ansich const char* fields_milch_14_tage[][size_tabellen_erstellen] = { {"tiernummer", "int", s_longlong, "0", "UNSIGNED"}, {"primusnummer", "int", s_char, "1", "UNSIGNED"}, {"tag", "int", s_char, "0", "UNSIGNED"}, {"menge", "int", s_short, "0", "UNSIGNED"}, }; // usw // dann die tabellenwerte class tables { public: const char* name; const char*** fields; const char* key; unsigned long size; tables(const char* name2give, const char *** field2give , const char* key2give, unsigned long size2give) { name = name2give; fields = field2give; key = key2give; size = size2give; } }; // und hier stehn die dann alle drin tables tabellen[] = { tables("milch_14_tage", fields_milch_14_tage, "tiernummer, primusnummer,tag", (sizeof(fields_milch_14_tage)/size_tabellen_erstellen/4)), tables("milch", fields_milch, "tiernummer, primusnummer,tag", (sizeof(fields_milch)/size_tabellen_erstellen/4)), tables("stationswerte", fields_stationswerte, "tiernummer, primusnummer, tag", (sizeof(fields_stationswerte)/size_tabellen_erstellen/4)), };
statt char *** hab ich void* dann gehts, aber char*** führt zum Fehler:
[C++ Fehler] db_config.h(457): E2285 Keine Übereinstimmung für 'tables::tables(char *,const char * ( *)[5],char *,unsigned int)' gefunden
Compiler ist Borland C++ Builder 6
[ Dieser Beitrag wurde am 04.04.2003 um 10:37 Uhr von dreaddy editiert. ]
-
So gehts. Aber besonders elegant finde ich das Ganze nicht unbedingt.
const char* s_char = "1"; const char* s_short = "2"; const char* s_long = "4"; const char* s_longlong = "8"; //const char* size_tabellen_erstellen = "5"; // <=== häh??? const int size_tabellen_erstellen = 5; const anzahl_felder=4; const char* fields_milch_14_tage[4][size_tabellen_erstellen] = { {"tiernummer", "int", s_longlong, "0", "UNSIGNED"}, {"primusnummer", "int", s_char, "1", "UNSIGNED"}, {"tag", "int", s_char, "0", "UNSIGNED"}, {"menge", "int", s_short, "0", "UNSIGNED"}, }; class tables { public: const char* name; const char* (&fields)[4][size_tabellen_erstellen]; const char* key; unsigned long size; tables(const char* name2give, const char*(&field2give)[4][size_tabellen_erstellen] , const char* key2give, unsigned long size2give): fields(field2give), name(name2give), key(key2give), size(size2give) { // alles in Initialisierungsliste erledigt }; }; int main() { tables("milch_14_tage", fields_milch_14_tage, "tiernummer, primusnummer,tag",(sizeof(fields_milch_14_tage)/size_tabellen_erstellen/4)); return 0; }
[ Dieser Beitrag wurde am 04.04.2003 um 12:58 Uhr von CodeWalker editiert. ]
-
wenn du aus
const char* fields_milch_14_tage[4][size_tabellen_erstellen] = const char*(&field2give)[4][size_tabellen_erstellen] const char*(&field2give)[4][size_tabellen_erstellen] const char* fields_milch_14_tage[][size_tabellen_erstellen] = const char*(&field2give)[][size_tabellen_erstellen] const char*(&field2give)[][size_tabellen_erstellen]
machst, da die Tabellen unterschiedlich lang sind, ist das genau was ich wissen wollte danke
Also wenn du eine bessre Idee hast bin ich da flexibel, aber ich brauch jetzt nurnoch 5 Zeilen Programmcode um die Tabellen zu generieren und wartungsfreundlich ist es auch ...