ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
463
463
EMPFEHLEN
-
03.01.10 20:18 #1Need_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!
-
03.01.10 20:39 #2
- 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
-
03.01.10 20:53 #3Need_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
-
Hallo,
du könntest eine union verwenden:
Du musst dann nur den type entsprechend setzen (TYPE_TEXT oder TYPE_IMAGE).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;
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
-
03.01.10 21:24 #5Need_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
-
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
-
04.01.10 12:37 #7Need_Name Tutorials.de Gastzugang
Super Danke vielmals!!
Lg
-
04.01.10 12:42 #8
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 erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
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.
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
-
C-structs und Vererbung?!
Von canfänger im Forum C/C++Antworten: 12Letzter Beitrag: 02.02.10, 21:42 -
C++ structs lesen
Von Orthak im Forum C/C++Antworten: 7Letzter Beitrag: 13.01.09, 21:21 -
sort vector von structs
Von Thomasio im Forum C/C++Antworten: 9Letzter Beitrag: 17.03.08, 15:38 -
Protokollsachen: Structs aus C++ übernehmen?
Von BeaTBoxX im Forum .NET Application und Service DesignAntworten: 3Letzter Beitrag: 15.12.06, 13:39 -
[C] Warnung bei structs
Von rookie im Forum C/C++Antworten: 3Letzter Beitrag: 10.02.03, 12:55





Zitieren



Login






