Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Es wird eine Struktur und eine Klasse etworfen, wobei die Klasse einen Zeiger auf ein Objekt diese Struktur besitzt. Dass die Struktur leer ist, tut jetzt nichts zur Sache ;) struct MyStruct; class MyClass { MyStruct* pMemStruct; }; // Definition einer Funktion, die einen Array an MyClass-Objekten als Parameter bekommt void Func(MyClass* pClassArray) { // Hier liegt nun das Problem: Die zweite Funktion erwartet nun einen Array von Struktur-Objekten, die von pClassArray irgendwie subtrahiert werden müssen. // Doch wie soll man dies realisieren? Func2(...); } void Func2(MyStruct* pStructArray) { // do something } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Es wird eine Struktur und eine Klasse etworfen, wobei die Klasse einen Zeiger auf ein Objekt diese Struktur besitzt. Dass die Struktur leer ist, tut jetzt nichts zur Sache ;) struct MyStruct; class MyClass { public: MyStruct* pMemStruct; }; // Definition einer Funktion, die einen Array an MyClass-Objekten als Parameter bekommt void Func(MyClass* pClassArray) { // Hier liegt nun das Problem: Die zweite Funktion erwartet nun einen Array von Struktur-Objekten, die von pClassArray irgendwie subtrahiert werden müssen. // Doch wie soll man dies realisieren? Func2(pClassArray->pMemStruct); } void Func2(MyStruct* pStructArray) { // do something } |
Zitat
Func2(pClassArray->pMemStruct);
Zitat von »"David_pb"«
Dann stell deine Frage doch evtl etwas genauer. Was erwartet z.B. Func2?
C-/C++-Quelltext |
|
1 2 3 4 |
void Func2(MyStruct* pStructArray) { // do something } |
Zitat von »"David_pb"«
Der Zeiger pClassArray zeigt auf ein Array! von MyClass Objekten. Was du tun willst ist für alle Arrayeinträge die jeweiligen MyStruct Objekte in ein Array zu sammeln und an Func2 zu übergeben
Zitat von »"David_pb"«
Zeigt pMemStruct auch auf ein Array von MyStruct Objekten, oder nur auf eine Instanz?
Zitat von »"David_pb"«
Und wie willst du feststellen wieviel Einträge das von pClassArray gezeigte Array hat?
C-/C++-Quelltext |
|
1 |
Func2( reinterpret_cast<MyStruct*>(pClassArray) ) |
C-/C++-Quelltext |
|
1 |
Func2( (MyStruct*)pClassArray )
|
C-/C++-Quelltext |
|
1 2 3 4 |
Func2(pClassArray[index]->pMemStruct); // oder Func2((pClassArray + index)->pMemStruct); |
Zitat von »"Progater"«
Es wäre natürlich einfacher die Anzahl an Einträgen per Parameter zu übergeben, aber wie kriegt man dies heraus mit dem sizeof-Operator, fallst überhaupt?
Zitat von »"David_pb"«
Du könntest in einer Schleife durch alle pClassArray gezeigten Elemente iterieren und ein weiteres Array mit den Zeigern der jeweiligen MyClass-Elemente anlegen, welches du dann an Func2 übergibst.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void Func(const std::vector<MyClass*>& data) { std::vector<MyStruct*> foo(count); std::vector<MyClass*>::const_iterator it = data.begin(); for ( ; it != data.end(); ++it ) foo.push_back(*it); Func2(foo); } void Func2(const std::vector<MyStruct*>& data) { // ... } |
Zitat von »"David_pb"«
Evtl shared_ptr statt rohen Zeigern verwenden, oder boost::ptr_vector.
Werbeanzeige