3 Stimmen

Zugriff auf Vektoren von Structs

Ich habe eine Struktur:

struct OutputStore 
{
    int myINT;
    string mySTRING;
}

Wenn ich ein Array vom Typ OutputStore wie folgt erstelle:

OutputStore *OutputFileData = new OutputStore[100];

dann kann ich es mit ansprechen:

OutputFileData[5].myINT = 27;

Aber wenn ich einen Vektor statt eines Arrays verwende:

vector<OutputStore> *OutputFileData = new vector<OutputStore>(100);

Dann bekomme ich eine '... ist kein Mitglied von 'std::vector<_Ty>' Fehler, wenn ich versuche:

OutputFileData[5].myINT = 27;

Da man auf einen Vektor über seinen Index genauso zugreifen kann wie auf ein Array, warum funktioniert diese Zeile nicht. Ich bin nur daran interessiert zu wissen, wie es schlägt vor, ich bin einige grundlegende Bit des Verständnisses fehlt.

(Ich wechselte zu einem Vektor, da ich push_back wollte, da ich die Größe, die meine Daten erreichen werden, nicht kenne. Ich habe es zu arbeiten, indem Sie einen Konstruktor für die Struktur und Push-back über das... Ich möchte nur zu verstehen, was hier los ist)

10voto

Goz Punkte 59671

Erzeugen Sie keinen Zeiger auf einen Vektor. Tun Sie einfach

vector<OutputStore> OutputFileData(100);

Und es wird Ihnen gut gehen. Damit Ihr obiger Code funktioniert, müssen Sie Folgendes tun

(*OutputFileData)[5].myINT = 27;

3voto

Brian R. Bondy Punkte 325712

Denn wenn Sie den []-Operator auf einen Zeiger anwenden, wird dieser Zeiger indiziert, nicht das Objekt. Um an das Objekt zu gelangen, müssen Sie zunächst Ihren Vektorzeiger dereferenzieren.

(*OutputFileData)[5].myINT = 27;
//*OutputFileData is the same as OutputFileData[0]

Wenn Sie den []-Operator direkt auf den Vektor anwenden wollen, deklarieren Sie ihn nicht als Zeiger.

vector<OutputStore> OutputFileData(100);
OutputFileData[5].myINT = 27;

Ein Vektor ist nur eine Klasse wie jede andere in C++. Wenn Sie einen Zeiger auf ihn erstellen, arbeiten Sie nicht direkt mit dem Objekt, bis Sie es dereferenzieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X