- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 16

Thema: nochmal Arraypointerreferenztohuwabohu

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast

    nochmal Arraypointerreferenztohuwabohu

    hallo,
    ich schleudere wieder bei Übergabe von arrays an Funktionen:

    ich habe einen array of cstrings
    Code:
    char mlist0[6][11] = {"Titel","ESC ","Ja","Nein","foo","bas"};
    und die folgende Funktion (in einer Klasse als Methode)
    Code:
    class tMenu {
     private:
       int MENULEN;
     public:
       char ** list; 
    
       void importlist ( char ** extlist ) {
            int16_t N = MENULEN;
            for(int line=0; line<N; line++) {
               strncpy( list[line], extlist[line], strlen(extlist[line]) );
            }
    }
    
    tMenu menu0(6,11);
    
    //
    ich will jetzt die Objekt-Methode aufrufen zum Initialisieren:


    menu0.importlist(mlist0); // exit status 1 no matching function for call to 'tMenu::importlist(char [6][11])'

    menu0.importlist(*mlist0); // exit status 1 no matching function for call to 'tMenu::importlist(char [11])'

    menu0.importlist(**mlist0); // exit status 1 invalid conversion from 'char' to 'char**' [-fpermissive]

    menu0.importlist(&mlist0); // exit status 1 no matching function for call to 'tMenu::importlist(char (*)[6][11])'

    menu0.importlist((char**)mlist0); // => runtime error:
    Exception ( 28 ):
    epc1=0x40206204 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000030 depc=0x00000000


    ich weiß nicht mehr, was ich jetzt sonst noch ausprobieren könnte...
    Geändert von HaWe (09.12.2018 um 16:24 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Hier kann zumindest die Funktion zum Aufruf zugeordnet werden:
    menu0.importlist(**mlist0); // exit status 1 invalid conversion from 'char' to 'char**' [-fpermissive]

    Bloß die Parameterübergabe ist noch nicht i.O.:
    invalid conversion



  3. #3
    HaWe
    Gast
    ja, genau, trotzdem läuft dann was schief zur Laufzeit wenn ich explizit caste

    menu0.importlist( (char**)mlist0 );

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Stört vielleicht, dass von "(**mlist0)" nach "void importlist ( char ** extlist )" konvertiert werden soll?
    Leider werde ich hier nicht weiter helfen können, weil ich mich damit zu wenig auskenne. Werde ich auch mal abstellen müssen...

  5. #5
    HaWe
    Gast
    vermutlich hat gestört, dass von der Form
    char list1[a][b]
    in die Form von
    char **list2
    übertragen werden sollte, daher mein Versuch des expliziten casts
    (char**) list1 // list1[a][b] ->-> **list1
    dann --> als Parameter für Funktion importlist (char ** list2)

    führt dann aber zu Laufzeitfehlern, wenn die array-Inhalte kopiert werden sollen

    Ich weiß nur absolut nicht, wie es stattdessen richtig geht
    Geändert von HaWe (09.12.2018 um 14:23 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Hier definierst Du die Liste:

    Code:
    char mlist0[6][11]
    mit ** mlist0 erzeugst Du einen Zeiger. (mit dem ersten * auf mlist0[x] und mit dem zweiten * auf mlist[x][x])

    Was ist, wenn Du so den Aufruf machst: menu0.importlist(*mlist0);

    Und Deine Funktion so gestaltest: void importlist ( char * extlist )

    Weil, beim Kopieren verwendest Du ja nur:extlist[line] nicht: extlist[x][line]

    Aber wie gesagt, ich glaube, ich stifte nur mehr Verwirrung!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    deine Deklaration macht mir irgendwie Kopfschmerzen ... aber für die symmetrie ist es schon nicht ganz verkehrt

    (nicht böse gemeint, da schrillen nur ein paar alarmglocken)

    deklariere doch ein

    char* mlist[]

    und fülle es mit

    char* entry0 = "bla"
    char* entry1 = "foo"
    mlist[0] = entry0;
    mlist[1] = entry1;

    ist zwar etwas umständlich aber explizit

    und in deiner import funktion kannst du auch so etwas schreiben
    void importlist ( char * extlist[] )
    damit sollte es besser funktionieren, probiert haeb ich es aber nciht ... das Problem ist nämlich dass die strings dabei unterschiedlich lang sind was weider andere phänomene hervorrufen kann
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

Ähnliche Themen

  1. Nochmal zu den adc Ports
    Von Fenriz im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 30.08.2008, 13:20
  2. Nochmal Uhrzeit
    Von martin66119 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 05.11.2007, 13:42
  3. nochmal : Greifarm
    Von JonasK im Forum Mechanik
    Antworten: 4
    Letzter Beitrag: 30.06.2007, 16:25
  4. Nochmal Roboterbau
    Von N00b|Linux im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 5
    Letzter Beitrag: 28.01.2005, 10:06
  5. Motortreiber (nochmal)
    Von Gottfreak im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 10
    Letzter Beitrag: 20.03.2004, 15:12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests