# struct als array an Funktion übergeben



## Dolphon (29. Mai 2006)

Hi,

ich habe eine Struct erstellt, welches als array an eine Funktion übergeben wird, damit es in mehren Funktionen zur Verfügung steht. 
Leider weiß ich nicht, als welchen Typ ich das Array bei der übergabe definieren muss. 
Er spuckt nämlich die Fehlermeldung aus Keine Übereinstimmung des Typ Paramater...

Hoffe einer weiß RAt. 

DAs 2. Problem ist, dass ich aus dem Array auch einen Struct eintrage löschen muss. Damit müssen dann die nachfolgenden Einträge nachrücken. 
Wie sieht dafür der Coder aus?


```
const int Max=10;
 struct fahrzeug
   {
     string fahrzeugname;
     string fahrzeugtyp;
     string hersteller;
     int achsen;
   };
   fahrzeug autos[Max];


void eingeben(int *wert, int N)
   {

 char b;
  do{
     clrscr();
     for(int i=0;i<N;i++)
     {
      cout<<i<<". Fahrzeugname:"<<endl;
      cin>>autos[i].fahrzeugname;
      cout<<i<<". Fahrzeugtyp:"<<endl;
      cin>>autos[i].fahrzeugtyp;
      cout<<i<<". Fahrzeug Hersteller:"<<endl;;
      cin>>autos[i].hersteller;
      cout<<i<<". Anzahl der Achsen:"<<endl;
      cin>>autos[i].achsen;
     }
      b=getch();
    }while(b != char(27));
   }

   void ausgabe(int *wert, int N)
   {
    for(int i=0;i<N;i++)
    {
      cout<<i<<". "<<autos[i].fahrzeugname<<endl;
      cout<<i<<". "<<autos[i].fahrzeugtyp<<endl;
      cout<<i<<". "<<autos[i].hersteller<<endl;
      cout<<i<<". "<<autos[i].achsen<<endl;
    }
   }

   void loeschen(int *wert,int N)
   {

   }


int main(int argc, char* argv[])
{
 int i;

char a;
  do{
    clrscr();
    cout<<"\n\n               Hauptmenue"<<endl;
    cout<<"              ------------"<<endl<<endl;
    cout<<"         [1]     Fahrzeuge eintragen"<<endl;
    cout<<"         [2]     Fahzeuge anzeigen"<<endl;
    cout<<"         [3]     Fahrzeuge löschen"<<endl;
    cout<<"        [ESC]    Programm beenden"<<endl<<endl;
    cout<<"        Ihre Eingabe [1,2,3,ESC]?";
    a=getch();
    if(a=='1') eingeben(autos,Max);
    if(a=='2') ausgabe(autos,Max);
    if(a=='3') loeschen(autos,Max);
    }while(a != char(27));              // char(27) : ESC


        return 0;
}
```


----------



## jokey2 (29. Mai 2006)

1. Du brauchst das Array gar nicht als Argument übergeben, da es global deklariert ist. Auch 'Max' mußt du aus dem selben Grund nicht übergeben. Beides ist in allen Funktionen ansprechbar.
Falls Du trotzdem mal ein Array als Parameter übergeben willst, dann geht das so: 

```
void eingeben(fahrzeug[], int N){...}
```
 2. Dazu ist ein Array nur die drittbeste Lösung (von dreien ). Eine Liste wäre besser (z.B. std::list aus der STL).
Wenn du trotzdem ein Array verwenden möchtest, dann mußt Du alle Elemente mit höherem Index als das zu löschende um einen Index nach oben kopieren und das letzte löschen. Dabei ist 'löschen' allerdings etwas unglücklich, denn ein Array mit 10 Elementen hat immer 10 Elemente, Du kannst es nicht dynamisch verkürzen oder verlängern. Du kannst nur die im jeweiligen struct enthaltenen Werte löschen (die strings leeren und den int auf '0' setzen).
Aber wie schon gesagt, ein std::list wäre da besser.


----------

