2017-04-22 3 views
-2

Ich bekomme immer Fehler "tiefgestellt erfordert Array oder Zeigertyp" bei der Arbeit mit einem Array von Paaren. Ich habe mir alle anderen Threads mit ähnlichen Problemen angeschaut, konnte sie aber nicht beheben.Dynamisch sortierten Array von Paaren: Einstellwerte für erste/zweite

Ich deklarierte dynamisch eine Reihe von Paaren, die wie Paar aussieht * m_Array; Und legen Sie die Array-Größe mit m_Array = neues Paar [c];

Nun, was ich nicht tun kann, ist Zugriff auf die erste und zweite des Paares, in einem Index des Arrays. Ich bekomme den Fehler, wenn ich versuche, solche Dinge zu tun.

for (int i = 0; i < m_Size; i++) { 
    m_Array->first[i] = rhs.m_Array->first[i]; 
    m_Array->second[i] = rhs.m_Array->second[i]; 
} 

Es scheint intuitiv wie es wie dem folgenden Code mehr sein sollte, aber meine IDE hat mir für jede Hilfe Vielen Dank nicht wie m_Array[i]

for (int i = 0; i < m_Size; i++) { 
    m_Array[i]->first = rhs.m_Array[i]->first; 
    m_Array[i]->second = rhs.m_Array[i]->second; 
} 

mit!

+0

Bitte genauer über _ "meine IDE mag nicht" _. –

Antwort

1

Sie sind fast da.

Wenn m_Array ein Zeiger auf einige Paare ist, dann ist m_Array[0] das erste Paar; dann ist m_Array[0].first das "erste" Mitglied dieses ersten Paares.

Es besteht keine Notwendigkeit für den dereferencing Mitglied Zugang Betreiber ->, wie das Abonnement [i] bereits für Sie dereferenziert hat (das heißt, m_Array[i] bedeutet *(m_Array + i)). Sie brauchen also nur den normalen Benutzerzugriffsoperator ..

So:

for (int i = 0; i < m_Size; i++) { 
    m_Array[i].first = rhs.m_Array[i].first; 
    m_Array[i].second = rhs.m_Array[i].second; 
} 

Oder Sie könnten all diese Mühe überspringen und einfach schreiben:

for (int i = 0; i < m_Size; i++) { 
    m_Array[i] = rhs.m_Array[i]; 
} 

Oder Sie das auch und Wechsel von new und Arrays zu einem schönen std::vector überspringen könnte, dann haben es macht die ganze Arbeit für dich.

+0

Danke! Der Grund, warum ich das vorher nicht gemacht habe, war, dass wenn ich 'm_Array [i]. 'Eingeben würde, dass keine Mitglieder verfügbar wären und es keine Auto-Vervollständigen-Option gäbe. Ich benutze Visual Studio, also im Allgemeinen, wenn es keine automatische Vervollständigung gibt, bedeutet es, dass es nicht gut ist. – Grehgous

+0

@Grehgous: Sie sollten zuerst Gehirn, Intellisense/Autocomplete Sekunde (oder gar nicht) verwenden. Sich auf solche Werkzeuge zu verlassen, ist eine schlechte Idee, da sie nicht perfekt sind –

Verwandte Themen