View Single Post
Spørsmål 1: Problemet er at alt som deklareres i en funksjon vil slutte å eksistere i det du forlater funksjonen, og minnet det opptok frigjøres (med unntak av ting som deklareres dynamisk med new). Det samme gjelder for øvrig ting som deklareres i if-blokker, for-løkker også videre – les om scope for å lære mer om dette, for eksempel her. Du må derfor ha den deklarert et annet sted for å ikke ende i en knipe. Nå vet ikke jeg hvordan du har strukturert resten av programmet og hvordan spillet er ment å fungere, men det kan kanskje være naturlig å deklarere delay-variabelen i spillerklassen? Eller i funksjonen som styrer spillets gang, som for eksempel main? Eventuelt kan du lage de globale, selv om det som regel gir en ryddigere struktur å unngå de. Det er i det hele tatt vanskelig å gi et konkret svar på hvordan du best løser dette når man vet så lite om programmet ellers.

Spørsmål 2: Du kan for eksempel lage en array med Person-pekere av en bestemt lengde, også bruke new for å deklarere de du trenger. Men da bør du også huske på såkalt garbage collection og slette de med delete-operatoren når de ikke lenger skal eksistere. Deklareringen kan se slik ut:

Kode

int main()
{
  cout << "How many players? ";
  int nPersons;
  Person persons [50];  // max 50 spillere (49 pga 1-indeksering), bør kontrollere at nPersons < 50
  cin >> nPersons;

  for(int i=1; i <= nPersons; i++) {
    person[i] = new Person;  // disse bør alle slettes med 'delete' senere
  }
  return 0;
}
Men, selv om du bør forstå hvordan og hvorfor dette fungerer, så vil det i praksis være lettere å bruke en vector. Det er en datatype som fungerer som en dynamisk array hvor du kan legge til og slette elementer uten å sette noen initiell grense, og uten særlig med mikkmakk. Koden kan da se omtrent slik ut:

Kode

#include <vector.h>
int main()
{
  cout << "How many players? ";
  int nPersons;
  vector<Person> persons;
  cin >> nPersons;

  for(int i=1; i <= nPersons; i++) {
    Person a_person;
    persons.push_back(a_person);
  }
  return 0;
}
Til slutt vil jeg anbefale at du venner deg til null-indeksering. Det er slik alle arrays fungerer, og det er generelt vanlig å begynne å telle fra og med null i programmeringsverdenen. Noe annet vil bare bli knotete senere, du kaster bort en minneplassering hver gang du bruker en sekvens med elementer i et array, og standard datatyper som vector, deque og list begynner alltid fra plassering 0 uansett.