Zugriff einer Klassen-Methode auf ein Array
-
Hallo,
bin C++-Anfänger und habe das folgende Problem:
Ich möchte von einer Klassen-Methode aus auf ein Array (bestehend aus Strukturen) derselben Klasse zugreifen, was nicht funktioniert.Hier mal die wichtigsten Code-Zeilen:
Sound.h
class Sound { private: struct SOUNDDATA { string title; int channel; bool on; // is sound on? }; SOUNDDATA * soundData[100]; // ...Der Zugriff soll dann in der sound.cpp so erfolgen:
void Sound::loadMusic(const char * filename, int channelNumber) { int i; for (int i = 0; i <= 100; i++) { if (soundData[i].title == "") // das ist Zeile 91 in meinem Code // ... }Beim Kompilieren wird dann immer ein Fehler in Zeile 91 angezeigt:
"Links von .title muss sich eine Klasse/Struktur/Union befinden."Das versteh ich nicht ganz, da soundData ja eine Struktur ist.
Würde mich freuen, wenn mir jemand helfen könnte.
Schon jetzt vielen Dank dafür.
Gruß Lyxeos
-
Wieso Zeiger? Und wieso überhaupt ein Array? Benutze lieber std::vector.
std::vector<SOUNDDATA> soundData;
(SOUNDDATA ist ein schrecklicher Bezeichner.)
-
Um dir den Fehler zu erklären:
soundata ist bei dir ein *SOUNDDATA[100]. Somit ist sounddata[i] ein *SOUNDDATA. Und das ist keine Klasse, Struktur oder Union, sonder ein Zeiger auf eine Klasse. Du musst ihn erst dereferenzieren um auf die Elemente zugreifen zu können:(*(soundData[i])).titleDas ist aber reichlich umständlich, darum gibt es dafür eine Abkürzung:
soundData[i]->titleDas wäre die korrekte Syntax. Wie JanJan aber schon erklärt hat, hast du hier absolut keine Not, einen Zeiger auf ein statisches Array zu benutzen (eigentlich macht so eine Konstruktion niemals Sinn). std::vector ist eine passendes, leicht zu benutzendes C++-Konstrukt, welches hier viel besser passt. Wenn es unbedingt ein statisches Objekt sein soll, kannst du dir auch mal boost::array anschauen.