Structs übergeben



  • Hallo miteinander!
    Ich steh gerade aufm Schlauch und hoffe jemand kann mir dabei helfen.
    In meinem Programm gibt es ein Struct (via Typedef) Neighbour mit verschiedenen Feldern.
    Anschließend habe ich ein Feld myNeighbours[] mit der Länge definiert, das aus Feldern Neighbour besteht:
    typedef struct{
    ..
    ..
    ..
    } Neighbour;
    Neighbour myNeighbours[];

    Ich möchte in eine Funktion dieses Feld, das vorher schon beschrieben worden ist, in eine andere übergeben, diese soll ein Update durchführen und das Ding wieder zurückgeben.

    Die Form hierfür ist

    return_type function_name(list of parameters);

    Wie realisiere ich sowas?
    Hüüüllllfffffffäääääääääää

    Danke

    Andi



  • a) Du kannst eine einzelne struct übergeben:

    Neighbour update(Neighbour data)
    {
      data.name = ...;
      ...
      return data;
    }
    
    ...
    for(int i=0;i<nb_count;++i)
      myNeighbours[i]=update(myNeighbours[i]);
    

    Alternativ kannst du auch eine Referenz auf den zu ändernden Datensatz oder einen Pointer auf das komplette Feld übergeben und die Daten direkt vor Ort ändern.



  • Danke schonmal für die Hilfe.
    Mein Problem ist aber folgendes:
    Ich implementiere einen ApplicationLayer.
    Innerhalb dieses wird auf jede ankommende Nachricht separat ein Update der Nachbarn durchgeführt.
    Dafür wird das Feld zuerst durchsucht ob der Eintrag schon vorhanden ist, wenn nicht, dann neu angelegt.
    Das bedeutet, ich brauche das gesamte Struct in meiner Funktion.
    Ein Feld allein reicht nicht.

    Kannst du mir die Vorschrift für das Deklarieren der Referenz zeigen?
    Bin kein Pro in C++..... 😕

    Danke



  • was meinst du mit gesamtes Struct!

    Neighbour update(Neighbour data)
    {
      data.name = ...;
      ...
      return data;
    }
    

    hier hast du ja ein gesamtes struct drin!

    einer referenz übergibst du mit einem & (da veränderst du aber direkt, und gibst kein nachbarn zurück)



  • OK, Übergabe per Referenz (ebenfalls Einzelobjekt):

    void update(Neighbour& nb)
    {
      nb.name=...;
      ...
    }
    
    ...
    for(int i=0;i<nb_count;++i)
      update(myNeighbours[i]);
    

    Und Übergabe per Pointer (komplettes Array):

    int search(Neighbour* data,size_t dlen,const Neighbour& val)
    {
      for(int i=0;i<dlen;++i)
        if(data[i]==val) return i;//gefunden
      return -1;                  //nicht gefunden
    }
    
    ...
    Neighbour myNeighbours[nb_count],gast;
    int pos=search(myNeighbours,nb_count,gast)
    if(pos>=0)
      cout<<"Nachbar "<<pos<<" gefunden\n";
    else
      cout<<"nicht vorhanden\n";
    


  • ok, ich werds ausprobieren!!!
    Vielen Dank!!!!


Anmelden zum Antworten