struct elemente mit index ausgeben

sdi

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

Code:
   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?
 
du kannst bei klassen mit dem operator [] arbeiten, ich denk mal bei struct ebenso:
Code:
int rs232_daten::operator[] (int rsh)
{
  switch(rsh)
  {
    case 1:
      return modus_A1;
    case 2:
      return kommando_T1;
    ...
  }
}
 
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:

Code:
#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
Sorry ich hab mich geirrt.

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

Code:
#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
 
ok... ist vielleicht nicht schön aber es funktioniert:D
struct/union/class werden glaub ich als eins behandelt in C++
 
moin



Warum nciht einfach so:
Code:
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?
 
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
 
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:
Code:
#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
 
Zuletzt bearbeitet:
Zurück