Field '...' could not be resolved - Hilfe bei Klasse

Jennesta

Erfahrenes Mitglied
Hallo,
ich habe irgendwie Probleme, an Elemente einer Klasse zu kommen.
ich habe 3 Verschiedene Klassen, diese stammen alle von einer Basisklasse ab. Folgender Aufbau:
C++:
typedef struct OutputElement_ {
	std::string OutputType;
	std::string OutputID;
} OutputElement;

typedef struct KMLContour_type_ : public OutputElement {
	BoundingBox_type BoundingBox;
	SpectrumResource_type SpectrumResource;
	std::vector<int> ContourLevel;
} KMLContour_type;
[...]

Nun besitze ich einen Vektor indem ich die OutputElemente speicher.
C++:
std::vector<OutputElement> OutputDefinition;

Nun kann ich anhand der Variablen OutputType die verschiedene structs identifizieren und sobald das getan den Elementen ihre spezifischen Werte zuweisen. Leider funktionieren meine Versuche wie
C++:
OutputDefinition.at(num_outputelements).BoundingBox = box;
nicht. Hier gibt es den Fehler "Field 'Boundingbox' could not be resolved"

Daher nun die Frage, wie kann ich es schaffen, dass es so funktioniert? Sind hier vielleicht casts notwendig? Wenn ja wie sieht das aus? Oder ist der Ansatz generell nicht gut?

Grüße Jennesta
 
Zuletzt bearbeitet:
Hi.
C++:
typedef struct OutputElement_ {
	std::string OutputType;
	std::string OutputID;
} OutputElement;

typedef struct KMLContour_type_ : public OutputElement {
	BoundingBox_type BoundingBox;
	SpectrumResource_type SpectrumResource;
	std::vector<int> ContourLevel;
} KMLContour_type;
[...]
In C++ kannst du dir die typedef's sparen, sie sind überflüssig.

Außerdem ist es nicht unbedingt guter OOP Stil Attribute öffentlich zu machen.

Nun besitze ich einen Vektor indem ich die OutputElemente speicher.
C++:
std::vector<OutputElement> OutputDefinition;
Du kannst in diesem Vektor ausschließlich OutputElement Instanzen speichern. D.h. in diesem Vektor sind keine KMLContour_type Objekte drin, wenn du welche einfügst, werden diese automatisch zu OutputElement konvertiert.

Du mußt Zeiger verwenden und dann mit dynamic_cast arbeiten:
C++:
std::vector<OutputElement*> OutputDefinition;

...

KMLContour_type* p = dynamic_cast<KMLContour_type*>(OutputDefinition.at(num_outputelements));

if (p != 0) {
  p->BoundingBox = box;
}
Gruß
 
Zurück