[c++] vector in een vector, int toevoegen - pointer probleem

Pagina: 1
Acties:

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 26-08 19:52
Ik ben bezig met een programma in c++ (builder 5). Daarvoor moet ik de afstand tussen 2 steden opslaan. Eerst had ik een 2 dimensionaal array gebruikt, maar omdat die niet te returnen valt en niet dynamisch qua grootte is, heb ik gekozen voor:
C++:
1
typedef vector<vector<int> > afstandenMatrix;

ik heb de volgende variabele gedeclareerd:
C++:
1
afstandenMatrix am;

In een bepaalde methode wil ik nu bij 2 steden de afstand invullen.
C++:
1
2
3
4
5
6
7
8
9
10
11
void stedenAfstanden::updateAfstand(string vanStad, 
        string naarStad, int afstand)
{
  int vanStadsIndex  = stadToIndex(vanStad);
  int naarStadsIndex = stadToIndex(naarStad);
  if (vanStadsIndex!=-1 && naarStadsIndex!=-1)
  {
    vector<int>* rij = &am[vanStadsIndex];
    rij[naarStadsIndex] = afstand;
  }
}
Met deze code krijg ik op regel 9 de volgende foutmelding:
code:
1
2
Could not find a match for 
'vector<int,allocator<int> >::operator =(int)
Ik denk zelf dat ik iets fout doe met het pointer gebeuren, maar ik kom er niet uit.

[ Voor 11% gewijzigd door Tim Schuhmacher op 13-12-2002 14:13 ]


  • DeGroninger2
  • Registratie: Mei 2002
  • Laatst online: 10-08 08:27
Snelle oplossing:
C++:
1
(*rij)[naarStadsIndex] = afstand;

De variable RIJ is een pointer naar vector<int>. De compiler probeert nu de
braces los te laten op de pointer in plaats op de inhoud van de pointer (jouw
vector<int>). Dus een eenvoudige dereference lost het probleem op.

  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Laatst online: 26-08 19:52
Ja, dankje wel. Kan ik weer verder!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Je kunt natuurlijk ook gewoon
C++:
1
am[vanStadsIndex][naarStadsIndex] = afstand;
schrijven. Vind ik ook duidelijker, zo'n variabele "rij" voegt niks toe.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein