Frage

Kann mir jemand helfen, mit dieser ...

vector<unsigned int> *vVec = new vector<unsigned int>;
        vVec .reserve(frankReservedSpace);

        start = std::clock();
        for(int f=0; f<sizeOfvec; f++)
        {   //Populate the newly created vector on the heap
            vVec .push_back(pArray[f]);
        }

Ich erhalte: Fehler C2228: links von '.reserve' muss Klasse / Struktur / Union haben

Ich erstelle eine Vektor den neuen Operator, so dass sie die Funktion überlebt, wo sie erstellt wird. Dies deshalb gibt mir einen Zeiger auf diesen Vektor auf dem Heap zurück, anstatt ein tatsächliches Vektorobjekt selbst. deshalb wird es lassen Sie mich nicht .reserve durchführen () von push_backs. Ich kann nicht einen Weg, um es sehen, kann jemand helfen?

War es hilfreich?

Lösung

vVec ist ein Zeiger auf einen Vektor. Daher sollten Sie die indirection verwenden - (.) (>) Operator anstelle der Punkt

vector<unsigned int> *vVec = new vector<unsigned int>;
vVec->reserve(frankReservedSpace);

start = std::clock();
for(int f=0; f<sizeOfvec; f++)
{  //Populate the newly created vector on the heap
   vVec->push_back(pArray[f]);
}

Andere Tipps

Use "->" statt "" vVec ist der Zeigertyp, so müssen Sie operator -> verwenden, um Mitglieder des Objekts für den Zugriff auf sie verweist.

Anstelle von

vVec.reserve(frankReservedSpace);

Sie wollen:

vVec->reserve(frankReservedSpace);

Ich persönlich für die ungarische Schreibweise nicht kümmern Sie sich in Ihrem Variablennamen bauen haben. Ich würde lieber etwas mehr domänenspezifischen und selbsterklärend als ‚vVec‘ sehen. Wenn Sie auf eine verknüpfte Liste ändern entschieden, würde der Name der Variablen, das reflektieren sich ändern müssen? Offensichtlich ist die Antwort nein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top