# struct elemente mit index ausgeben



## sdi (1. November 2004)

Hallo, 
   die einzelnen Elemente 
   folgender Struktur würde ich gern für eine Ausgabe  wie ein Array ausgeben. 


```
struct rs232_daten 
     { 
   	int modus_A1; 
   	int kommando_T1; 
   	int ad_V1H_V1L; 
   	int flag_I1; 
   	int status_S1; 
   	int DS2438_modus_A2; 
   	int DS2438_T2; 
   	int DS2438_V2H_V2L; 
   	int DS2438_I2; 
   	int DS2438_S2; 
     }datum; 
   . 
   . 
   . 
   for(int i=0;i<10;i++) ausgabe(datum[i]);//so ist`s quatsch
```
 
   Weiß jemand, wie man das realisieren kann?


----------



## C Coder (1. November 2004)

du kannst bei klassen mit dem operator [] arbeiten, ich denk mal bei struct ebenso:

```
int rs232_daten::operator[] (int rsh)
{
  switch(rsh)
  {
    case 1:
      return modus_A1;
    case 2:
      return kommando_T1;
    ...
  }
}
```


----------



## RedWing (1. November 2004)

> du kannst bei klassen mit dem operator [] arbeiten, ich denk mal bei struct ebenso:



@C Coder
Also seit wann kann man für structs Methoden definieren?
Das wäre mir neu! structs sind kein OO Sprachelement!

@sdi:

Du müsstest dir eine eigne Methode definieren:

In etwa so:


```
#include <iostream>

using namespace std;

struct rs232_daten  
{ 
        int modus_A1;
        int kommando_T1;
        int ad_V1H_V1L;
        int flag_I1; 
        int status_S1;
        int DS2438_modus_A2;
        int DS2438_T2;
        int DS2438_V2H_V2L;
        int DS2438_I2;
        int DS2438_S2;
}; 


void print_rs232_data(rs232_daten *d){

        cout << d->modus_A1 << endl; 
        cout << d->kommando_T1 << endl;
}

int main(){

        rs232_daten *d = new rs232_daten;
        d->modus_A1 = 5;
        d->kommando_T1 = 4;
        print_rs232_data(d);
        delete d;
}
```

Gruß

RedWing


----------



## C Coder (1. November 2004)

probiers mal aus... ansonten empfehle ich auf eine klasse umzusteigen


----------



## RedWing (1. November 2004)

@C Coder
Sorry ich hab mich geirrt.

Also so funktionierts: (nur mit einem C++ Compiler)


```
#include <iostream>

using namespace std;

struct rs232_daten  
{ 
        int modus_A1;
        int kommando_T1;
        int ad_V1H_V1L;
        int flag_I1; 
        int status_S1;
        int DS2438_modus_A2;
        int DS2438_T2;
        int DS2438_V2H_V2L;
        int DS2438_I2;
        int DS2438_S2;
        int operator[](int);
}; 


int rs232_daten::operator[] (int rsh)
{
  switch(rsh)
  {
    case 0:
      return modus_A1;
    case 1:
      return kommando_T1;
  }
```

Allerdings glaube ich das der "C++" Compiler die struct wie eine Klasse 
behandelt, da OO keine "C " Eigenschaft ist und von daher so ein Programmierstil
nicht die feine englische Art ist 

In diesem Sinne

Gruß

RedWing


----------



## C Coder (1. November 2004)

ok... ist vielleicht nicht schön aber es funktioniert
struct/union/class werden glaub ich als eins behandelt in C++


----------



## Tobias K. (1. November 2004)

moin



Warum nciht einfach so:

```
struct rs232_daten 
{ 
   int modus_A1; 
   int kommando_T1; 
   int ad_V1H_V1L; 
   int flag_I1; 
   int status_S1; 
   int DS2438_modus_A2; 
   int DS2438_T2; 
   int DS2438_V2H_V2L; 
   int DS2438_I2; 
   int DS2438_S2; 
}; 
   
rs232_daten datum[10];

for(int i=0;i<10;i++)
   ausgabe(datum[i]);   //so ist`s quatsch
```


Oder hab ich das jetzt ganz falsch verstanden?


----------



## RedWing (1. November 2004)

> ... die einzelnen Elemente
> folgender Struktur würde ich gern für eine Ausgabe wie ein Array ausgeben. ...




 

Gruß

RedWing


----------



## Tobias K. (1. November 2004)

moin



Ja dann erklär es mir!

Oder ist gemeint das z.B. datum[1] = int modus_A1 und datum[2] = int kommando_T1



mfg
umbrasaxum


----------



## RedWing (1. November 2004)

So ist es gemeint...
Und genau das erledigt C Coders Vorschlag mit dem  überladen des [] operators...
Was aber nur mit einem C++ Compiler kompiliert
Der Code könnte so aussehen:

```
#include <iostream>

using namespace std;

struct rs232_daten  
{ 
        int modus_A1;        
        int kommando_T1;     
        int ad_V1H_V1L;      
        int flag_I1;         
        int status_S1;       
        int DS2438_modus_A2; 
        int DS2438_T2;       
        int DS2438_V2H_V2L;  
        int DS2438_I2;       
        int DS2438_S2;       
        int& operator[](int); 
}; 


int& rs232_daten::operator[] (int rsh)
{
  switch(rsh)
  {
    case 0:
      return modus_A1;     
    case 1:
      return kommando_T1;  
        ...
  }
}

int main(){

        rs232_daten d;       
        d[0] = 5;      
        d[1] = 4;   

        for(int i = 0; i < 2; i++)
                cout << d[i] << endl;
        
}
```


Gruß

RedWing


----------

