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 😃 ...


Anmelden zum Antworten