tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
463
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Need_Name Tutorials.de Gastzugang
    Hallo!

    Ich würde gerne eine Liste für 2 verschiedene Structs erstellen.
    Es ist so, dass je nach Benutzereingabe die Daten in eines der beiden Structs gespeichert werden.
    Mein Problem is jetzt wie ich die 2 Structs miteinander verknüpfe, damit ich eine Liste für die beiden Structs zusammen bekomme.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    typedef struct
    {
      char *text;
      int position_x;
      int position_y;
      int font_size;
      char *fill;
      int group;
      int counter_user_input;
    }Text;
     
    typedef struct
    {
      char *image_url;
      int position_x;
      int position_y;
      int width;
      int heigth;
      int group;
      int counter_user_input;
    }Image;

    Danke schon mal im Voraus!
     

  2. #2
    Onkel Schuppig Onkel Schuppig ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    191
    Hallo,
    wenn es um C++ geht, kannst du deine beiden structs von einer gemeinsamen Basisklasse ableiten
    und danach in einer Liste in beliebiger Menge und Reihenfolge ablegen.
    Beispiel
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
    // Deklarationen
    struct Listenelement {
    };
     
    struct Text : Listenelement {
      char *text;
      int position_x;
      int position_y;
      int font_size;
      char *fill;
      int group;
      int counter_user_input;
    };
     
    struct Image : Listenelement {
      char *image_url;
      int position_x;
      int position_y;
      int width;
      int heigth;
      int group;
      int counter_user_input;
    };
     
    // Implementierung
    #include <vector>
    using namespace std;
     
    int main (int argc, char** argv) {
    // Liste anlegen
      vector<Listenelement*> liste;
     
      Text* new_text = new Text();
      new_text.text = "hallo user";
      liste.push_back(new_text);
     
      Image* new_image = new Image();
      new_image.image_url = "www.meerschweinchen.de";
      liste.push_back (new_image);
     
    // ab hier könnte man mit der Liste irgendetwas machen
    // ...
     
    // ab hier wird aufgeräumt
      for (vector<Listenelement*>::iterator iter = liste.begin(); iter != liste.end(); ++iter)
        delete *iter;    // den vorher mit "new" reservierten Speicher wieder freigeben
     
    // ende
      return 0;
    }
     
    Grüße OS

  3. #3
    Need_Name Tutorials.de Gastzugang
    Ehm ja danke schon mal für deinen rasche Antwort muss das Ganze jedoch in C realisieren. Gibts dort auch soetwas wie gemeinsame Basisklassen? Oder kann ich mit einem gemeinsamen Pointer auf die unterschiedlichen Structs zugreifen?
    Lg
     

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Hallo,

    du könntest eine union verwenden:

    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    #define TYPE_TEXT 1
    #define TYPE_IMAGE 2
     
    typedef struct
    {
      int type;
      union {
        Text text;
        Image image;
      };
    } TextOrImage;
    Du musst dann nur den type entsprechend setzen (TYPE_TEXT oder TYPE_IMAGE).

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    Need_Name Tutorials.de Gastzugang
    Aha super Danke!
    Hätte aber noch eine Frage und zwar wenn ich das jetzt über Union mache, kann ich ja nur auf einen der beiden Structs zugreifen oder?
    Wenn ich jetzt meine Liste realisien will, kann ich in der Liste immer nur Text oder Image stehen haben oder auch einmal Text und einmal Image?
    Lg
     

  6. #6
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von Need_Name Beitrag anzeigen
    Aha super Danke!
    Hätte aber noch eine Frage und zwar wenn ich das jetzt über Union mache, kann ich ja nur auf einen der beiden Structs zugreifen oder?
    Wenn ich jetzt meine Liste realisien will, kann ich in der Liste immer nur Text oder Image stehen haben oder auch einmal Text und einmal Image?
    Letzteres. Beispiel:
    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    int main(void) {
      TextOrImage mixed_array[3];
      mixed_array[0].type = TYPE_TEXT;
      mixed_array[0].text.text = "tutorials.de";
      mixed_array[1].type = TYPE_IMAGE;
      mixed_array[1].image.image_url = "http://www.tutorials.de/forum/images_v6/misc/tuts_default.gif";
      mixed_array[2].type = TYPE_TEXT;
      mixed_array[2].text.text = "User helfen Usern";
     
      int i;
      for (i = 0; i < 3; ++i) {
        switch (mixed_array[i].type) {
          case TYPE_TEXT:
            printf("Text: %s\n", mixed_array[i].text.text);
            break;
          case TYPE_IMAGE:
            printf("Image: %s\n", mixed_array[i].image.image_url);
            break;
        };
      }
     
      return 0;
    }

    Ausgabe:
    Code :
    1
    2
    3
    
    Text: tutorials.de
    Image: http://www.tutorials.de/forum/images_v6/misc/tuts_default.gif
    Text: User helfen Usern

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  7. #7
    Need_Name Tutorials.de Gastzugang
    Super Danke vielmals!!
    Lg
     

  8. #8
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Meines Wissens sollte man union eher vermeiden. Jedenfalls stehts in einigen Büchern.

    Aber ist nicht struct C? Oder wurde die Ableitung erst in C++ "erfunden"?
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  9. #9
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von ComFreek Beitrag anzeigen
    Meines Wissens sollte man union eher vermeiden. Jedenfalls stehts in einigen Büchern.
    Enthalten diese Bücher auch eine Begründung für diesen Rat? Gefährlich (im Sinne von nicht-portabel) wird es denke ich nur, wenn man in ein Feld etwas reinschreibt, um die Daten anschließend aus einem anderen Feld wieder auszulesen. Das passiert allerdings hier nicht.

    Zitat Zitat von ComFreek Beitrag anzeigen
    Aber ist nicht struct C? Oder wurde die Ableitung erst in C++ "erfunden"?
    struct ist Bestandteil von C und C++, Ableitungen gibt es nur in C++.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

Ähnliche Themen

  1. C-structs und Vererbung?!
    Von canfänger im Forum C/C++
    Antworten: 12
    Letzter Beitrag: 02.02.10, 21:42
  2. C++ structs lesen
    Von Orthak im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 13.01.09, 21:21
  3. sort vector von structs
    Von Thomasio im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 17.03.08, 15:38
  4. Protokollsachen: Structs aus C++ übernehmen?
    Von BeaTBoxX im Forum .NET Application und Service Design
    Antworten: 3
    Letzter Beitrag: 15.12.06, 13:39
  5. [C] Warnung bei structs
    Von rookie im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 10.02.03, 12:55