App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
[C++] operator *()
- Ersteller TiKu
- Erstellt am
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Hi,
ich stehe hier grad irgendwie auf dem Schlauch. Ich habe eine Klasse SimpleIterator. Diese enthält einen operator:
Desweiteren habe ich eine Klasse GlMatrixStackIterator, welche von SimpleIterator erbt. In einer Methode von GlMatrixStackIterator möchte ich nun obigen Operator nutzen. Wenn ich mich nicht irre, müsste das ja so gehen:
Nur leider mault da der Compiler rum, er könne GlMatrixStackIterator nicht zu TransformNode* konvertieren (eigentlich verständlich). Gibt es außer der folgenden Triviallösung noch einen anderen Weg?
TiKu
ich stehe hier grad irgendwie auf dem Schlauch. Ich habe eine Klasse SimpleIterator. Diese enthält einen operator:
Code:
TransformNode* SimpleIterator::operator*()
{
return nodeStack.top().node; //return the top elements node
}
Code:
TransformNode* n = *this;
Code:
TransformNode* n = this->operator *();
TiKu
this ist immer ein Zeiger, mit *this nimmst du den Zeiger auf den Zeiger auf die Instanz.
E: Blödsinn
Du inizialisierst den Zeiger auf eine Klasse ja mit einer Instanz einer Klasse, kann auch net gehen. Versuch mal TransformNode* n=this;
E: Blödsinn
Du inizialisierst den Zeiger auf eine Klasse ja mit einer Instanz einer Klasse, kann auch net gehen. Versuch mal TransformNode* n=this;
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Hmm, geht leider auch nicht:
Und wenn ich nen Typecast mache, schluckt er den Code zwar, aber das Programm stürzt dann ab (was es mit der Triviallösung nicht tut).error C2440: 'Initialisierung': 'SceneGraph::GlMatrixStackIterator *const ' kann nicht in 'SceneGraph::TransformNode *' konvertiert werden
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
TransformIterator.h:
Hintergrundinfo:
Ich mache ein vorlesungsbegleitendes Praktikum, bei dem man alle 2 Wochen ein Programm bekommt, welches um diverse Funktionen erweitert werden muss. Für die Lösung eines Teils der aktuellen Aufgabe bietet es sich meinen Informationen zufolge an, an besagter Stelle besagten (bereits vorgegebenen) Operator zu nutzen. Der Code tut ja auch was er soll, nur kapier ich nicht wie man den Operator aufrufen muss. Ruft man ihn als Funktion auf, geht's - aber das ist ja nicht Sinn und Zweck eines Operators.
Die Aufgabe hätte ich so zwar auch gelöst, nur interessant fände ich es trotzdem mal wie die Praktikumsleitung sich das eigentlich gedacht hat.
Code:
#ifndef TRANSFORMITERATOR_H
#define TRANSFORMITERATOR_H
#include "TransformNode.h"
namespace SceneGraph
{
/** Iterator class for traversing a scengraph */
class SimpleIterator
{
public:
/// initializes the Iterator by loading the TransformNode* n as the actual element
SimpleIterator(TransformNode* n);
/// returns the actual element (the node on top of the stack)
TransformNode* operator*();
/// true if elements left in the scenegraph
bool hasMoreElements() const;
/// selects the next element in the scenegraph as active
void next();
protected:
/// is called after each push operation to the local stack
virtual void afterPush() {}
/// is called before each pop operation from the local stack
virtual void beforePop() {}
/** stores information to point to a special node in the scenegraph*/
struct StackEntry
{
/// actual element that is returned by the * operator
TransformNode *node;
/// number [0..x] of the childelement that will be active after a call of next()
unsigned int nextChild;
};
/// stores the local stack of StackEntry elements
std::stack<StackEntry> nodeStack;
};
/** Iterator class for traversing a scengraph setting OpenGL Matrices during traversal*/
class GlMatrixStackIterator : public SimpleIterator
{
public:
/// initializes the Iterator by loading the TransformNode* n as the actual element
GlMatrixStackIterator(TransformNode* n);
protected:
virtual void afterPush();
virtual void beforePop();
};
}
#endif
Ich mache ein vorlesungsbegleitendes Praktikum, bei dem man alle 2 Wochen ein Programm bekommt, welches um diverse Funktionen erweitert werden muss. Für die Lösung eines Teils der aktuellen Aufgabe bietet es sich meinen Informationen zufolge an, an besagter Stelle besagten (bereits vorgegebenen) Operator zu nutzen. Der Code tut ja auch was er soll, nur kapier ich nicht wie man den Operator aufrufen muss. Ruft man ihn als Funktion auf, geht's - aber das ist ja nicht Sinn und Zweck eines Operators.
Die Aufgabe hätte ich so zwar auch gelöst, nur interessant fände ich es trotzdem mal wie die Praktikumsleitung sich das eigentlich gedacht hat.
Ach jetzt hab ich glaub ich verstanden worum es eigentlich geht.
Es müsste so funktionieren:
TransformNode* n = this*;
oder (bin mir gerade net sicher) so:
TransformNode* n = this*();
In jedem Fall ist es ungewöhnlich einen Operator zu definieren, der nur auf einen Wert angewendet wird. Normal wäre ja operator*(xyz abc);
Es müsste so funktionieren:
TransformNode* n = this*;
oder (bin mir gerade net sicher) so:
TransformNode* n = this*();
In jedem Fall ist es ungewöhnlich einen Operator zu definieren, der nur auf einen Wert angewendet wird. Normal wäre ja operator*(xyz abc);
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Nee, geht auch nicht. Ich frag den Kollegen bei der Abgabe mal wie das funktionieren soll.
Würd ich so nicht sagen. Angenommen Du baust Dir Deinen eigenen Integer-Zahlentyp (oder irgendwas anderes wo eine Iteration sinnvoll ist), dann macht ein unäres ++ oder -- sehr wohl Sinn.In jedem Fall ist es ungewöhnlich einen Operator zu definieren, der nur auf einen Wert angewendet wird. Normal wäre ja operator*(xyz abc);
- Mitglied seit
- 16.11.2001
- Beiträge
- 21.665
- Renomée
- 1.249
- Standort
- München
- Aktuelle Projekte
- World Community Grid
- Lieblingsprojekt
- Folding@Home
- Meine Systeme
- AMD Ryzen 9 5950X
- BOINC-Statistiken
- Folding@Home-Statistiken
- Prozessor
- AMD Ryzen 9 5950X
- Mainboard
- ASUS TUF Gaming X570-Pro [WI-FI]
- Kühlung
- be quiet! Shadow Rock 3
- Speicher
- 4x 16GB DDR4-3200 Corsair Vengeance LPX
- Grafikprozessor
- ASRock Radeon RX 550 Phantom Gaming Aktiv 2GB
- Display
- LG 27UL850-W, 27"
- SSD
- Samsung 980 PRO 2TB, Samsung 840 EVO 500GB
- HDD
- Seagate Barracuda 7200.14 3TB SATA3
- Optisches Laufwerk
- Samsung SH-S183A SATA schwarz (im externen Gehäuse)
- Gehäuse
- be quiet! Silent Base 802 schwarz
- Netzteil
- be quiet! Straight Power 11 Platinum 550W
- Tastatur
- Logitech G613 Lightspeed
- Maus
- Logitech M510
- Betriebssystem
- Ubuntu Linux 22.04
- Webbrowser
- Vivaldi
- Internetanbindung
-
▼100 MBit
▲40 MBit
Narf, nen Kommilitone hat soeben rausgefunden, dass *(*this) geht.
Irgendwie auch logisch (wenn ich mir das so anschaue): this ist ja nen Zeiger, also muss man erstmal dereferenzieren, bevor man den Operator anwendet.
Danke für Deine Hilfe, i_hasser.
Irgendwie auch logisch (wenn ich mir das so anschaue): this ist ja nen Zeiger, also muss man erstmal dereferenzieren, bevor man den Operator anwendet.
Danke für Deine Hilfe, i_hasser.
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 34K
- Antworten
- 8
- Aufrufe
- 4K