pointer auf struct array übergeben



  • void bla(){
        struct Player players;
        SetPlayerInfos(&players);
        //oder
        struct Player *pplayer = &players;
        SetPlayerInfos(pplayer);
    }
    
    SetPlayerInfos(struct Player *p){
        //tu was mit p
    }
    

    Vielleicht noch ein paar Tipps:
    Auch wenn es von allen außer mir als schön empfundenden wird, char name[80]; ist eine ganz schlechte Idee. Irgenwer wird irgendwann mehr als 79 Zeichen eingeben und das Programm stürzt ab, außerdem ist es Speicherverschwendung. Gewöhne dich an malloc und benutze char *. Eine Zahl in Arrayklammern ist fast immer falsch, du solltet schon genau begründen können wieso diese Zahl und keine andere (und das auch im Kommentar vermerken).

    Dein

    struct Player players[4];
    struct *p_players = players[4];
    

    funktioniert nicht wirklich. struct Player players[4]; baut dir 4 Player Strukturen, players[4] greift auf das fünfte Element zu (players[0] ist das erste, players[1] das zweite usw). Das heißt dein Programm wird abstürzen oder Blödsinn machen wenn SetPlayerInfos auf p_players zugreift.

    Außerdem ist struct Data undefiniert.



  • Danke für deine Antwort....

    ich habe jetzt mal die beiden Varianten ausprobiert....

    ich bekomme jedoch immer noch eine Fehlermeldung beim Compilieren...

    cannot convert parameter 1 from 'main::Player *'to Player *'

    die fehlermeldung erscheint da wo ich die Funtion aufrufe...

    struct Player players; 
        struct Player *pplayer = &players;
        SetPlayerInfos(pplayer); //<--hier
    


  • Welcher Compiler gibt denn so eine Fehlermeldung?

    Wenn SetPlayerInfos als SetPlayerInfos(struct Player *p) definiert ist muss das so gehen. Die Fehlermeldung sagt im Prinzip, dass der Typ den du übergibst nicht mit dem Typ übereinstimmt, mit dem du die Funktion aufrufst. Sowas wie "Cannot convert 'struct Player' to 'struct Player *'" wäre sinnvoll, da hast du versucht ihm eine Struktur als Zeiger auf die Struktur zu verkaufen oder andersrum. Aber was das "main::" soll weiß ich nicht.



  • ich nutze vs 05



  • ich hab noch mal ein wenig rum probiert....aber es wird nichts...

    mein source:

    struct Player //mein struct
    {
       char name[80];//ja...noch kein kein malloc^^
       int cash;
       int wins;
    }
    struct Player players[4]; //mein struct array <---auf das ich einen Pointer will
    
    struct Player *p_players = &players[0]; //mein pointer
    
    SetPlayerInfos(p_players);//funtion aufruf
    
    SetPlayerInfos(struct Player *p_players)//meine funktion
    {
    
    }
    

    Fehlermeldung: cannot convert parameter 1 from 'main::Player *'to 'Player *'
    naja wenn jemand weiter weiss...



  • Hinter das struct muss ein Semikolon (Zeile 6 hinter '}').
    players ist ein Pointer, mehr oder weniger. In deinem Code ist p_players dasselbe wie players. Das ist aber kein Fehler.
    Die Funktion SetPlayerInfos muss einen Rückgabewert haben, wenn du keinen willst muss es void SetPlayerInfos heißen.



  • naja...ich habe kurtz den Code aus dem Kopf hier gepostet...hab ihn nicht vor mir...

    aber das ";" & das void ist da...
    sry. für den fehler



  • Möglicherweise hast du dich bei deinem richtigen Code auch nur irgendwo vertippt.

    #include <stdio.h>
    
    struct Player{ //mein struct
       char name[80]; //ja...noch kein malloc^^
       int cash;
       int wins;
    };
    
    void SetPlayerInfos(struct Player *p_players){//meine funktion
    }
    
    int main(){
    	struct Player players[4]; //mein struct array <---auf das ich einen Pointer will
    	struct Player *p_players = &players[0]; //mein pointer
    	SetPlayerInfos(p_players);//funtion aufruf
    	return 0;
    }
    

    So läufts bei mir. Wenn das bei dir nicht läuft stimmt was mit deinem Compiler nicht.



  • vielen dank für deine Hilfe....

    ich habe denfehler gefunden....(oder besser gesagt..es war alles ok)...nur das das struct im main war...

    int main(void)
    {
       struct Player
       {
           char name[80];
           int cash;
           int wins;
       };
    }
    

    naja....jetzt such ich ne lösung um das struct im main zu behalten und es trotzdem an die funktion zu übergeben...

    wenn du ne ahnung hast wie ich das hinbekomme...?

    die funktion wird in meinem "main".cpp aufgerufen...liegt aber in einem anderen .cpp file...



  • ok...habs...

    ich habe jetzt das struct im header file definier....

    hoffe das darf man so machen;)


Anmelden zum Antworten