object met variabele grootte mag niet worden geïnitialiseerd c++

Ik begrijp dat deze vraag eerder is gesteld, maar ik begrijp niet waarom het in mijn geval niet werkt

void calc(vector<char> zodis1, vector<char> zodis2, vector<char> zodisAts,int zo1,int zo2,int zoA)
{
   int i,u=0;
   int zod1[zo1]=0;
   int zod2[zo2]=0;
   int zodA[zoA]=0; 
}

Alle 3 van zod1, zod2, zoA geeft me een foutmelding: variable-sized object may not be initialized c++
Maar de compiler moet de betekenis van zoweten voordat de initialisatie plaatsvindt, want cout<<zo1;werkt en print de betekenis uit

Dus wat is het probleem?


Antwoord 1, autoriteit 100%

Je kunt een arrayalleen declareren met een constantegrootte, die kan worden afgeleid tijdens het compileren. zo1,zo2en zoAzijn variabelen en de waarden kunnen alleen tijdens runtime bekend zijn.

Om uit te leggen, wanneer u geheugen toewijst aan de stapel, moet de grootte bekend zijn tijdens het compileren. Omdat de arrays lokaal zijn voor de methode, worden ze op de stapel geplaatst. Je kunt een constante waarde gebruiken, of geheugen toewijzen in de heapmet behulp van new, en de toewijzing ongedaan maken wanneer je klaar bent met delete, zoals

int* zod1 = new int[zo1];
//.... other code
delete[] zod1;

Maar je kunt hier ook vectorgebruiken in plaats van array, en vectorzorgt voor toewijzing op de heap.

Als een kanttekening, moet u vectorniet doorgeven op waarde, aangezien de hele vector wordt gekopieerd en als argument wordt doorgegeven, en er zal geen verandering zichtbaar zijn aan de kant van de beller. Gebruik vector<char>& zodis1.

Other episodes