Toon posts:

[C++] tweevoudig array

Pagina: 1
Acties:
  • 186 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met het initialiseren van een tweevoudig array in c++. Maar hij geeft een fout melding in visual studio 6. Maar nu krijg ik de volgende foutmelingen:

error C2059: syntax error : '{'
error C2143: syntax error : missing ';' before '{'
error C2143: syntax error : missing ';' before '{'
error C2143: syntax error : missing ';' before ','
error C2143: syntax error : missing ';' before ','
error C2143: syntax error : missing ';' before ','

maar nu snap ik niet waarom ik deze krijg want ik heb al van alles geprobeerd. Maar elke keer krijg ik dezelfde fout. Dit is de code:
C++:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;      

class AfstandTabel{
  // hier komen de prototypen en leden van deze class
  private:
    int afstandTabel[4][4];
  public:
    AfstandTabel(); // dit is de constructor
    int getInhoud(int rij, int kolom);
};

// hier komen de implementaties

// implementatie van de constructor
AfstandTabel::AfstandTabel(){
     afstandTabel[4][4] ={{12,12,12,12},{12,12,12,12},{12,12,12,12},{12,12,12,21}};

// implementatie van getInhoud
int AfstandTabel::getInhoud(int rij,int kolom) {
    int cijfer = afstandTabel[rij][kolom];
    return cijfer;
}

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Je sluit de { van regel 25 niet af. Standaard debug werk. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
mja dat klopt maar als ik die aflsluit heb ik het dubbele aan dezelfde foutmeldingen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Ik ben geen held met C++ maar is het niet sowieso de bedoeling dat elke functie een type heeft? Inclusief constructors?

edit:
1. My bad. :+


Het zal je probleem niet oplossen, maar ken je nu niet een heel array toe aan de positie [4][4] van het array? Moet het niet dit worden?
C++:
1
afstandTabel ={{12,12,12,12},{12,12,12,12},{12,12,12,12},{12,12,12,21}};

[ Voor 61% gewijzigd door NMe op 10-06-2004 16:46 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Een constructor heeft geen return type

https://fgheysels.github.io/


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je probeert een initialisatie uit te voeren op een variabele die al bestaat. Wat jij nu opschrijft is dat hij op positie (4,4) in de array die zut die erachter staat moet zetten. Je zult vrees ik gewoon elke positie afzonderlijk moeten benoemen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
bigbeng schreef op 10 juni 2004 @ 16:44:
Je probeert een initialisatie uit te voeren op een variabele die al bestaat. Wat jij nu opschrijft is dat hij op positie (4,4) in de array die zut die erachter staat moet zetten. Je zult vrees ik gewoon elke positie afzonderlijk moeten benoemen.
Idd, daar had ik gewoon over gelezen. 8)7

Kan hij echter niet dit doen:

code:
1
2
3
4
5
6
7
8
9
10
class AfstandsTabel
{
  private:
     int theTabel[][] = {
                            {2, 2, 2, 2},
                            {2, 2, 2, 2}
                            {2, 2, 2, 2}
                            {2, 2, 2, 2}
                  };
};

https://fgheysels.github.io/


Verwijderd

Topicstarter
kan het ook op een andere manier dan ? dat ik alles in een keer kan doen. De java manier zeg maar ?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Verwijderd schreef op 10 juni 2004 @ 16:37:
Ik ben bezig met het initialiseren van een tweevoudig array in c++. Maar hij geeft een fout melding in visual studio 6. Maar nu krijg ik de volgende foutmelingen:
VC6 is voorbij end-of-life, alleen de twee laatste versies (7.0 en 7.1) zijn nog levend.
error C2059: syntax error : '{'
error C2143: syntax error : missing ';' before '{'
error C2143: syntax error : missing ';' before '{'
error C2143: syntax error : missing ';' before ','
error C2143: syntax error : missing ';' before ','
error C2143: syntax error : missing ';' before ','

maar nu snap ik niet waarom ik deze krijg want ik heb al van alles geprobeerd. Maar elke keer krijg ik dezelfde fout. Dit is de code:
C++:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;      

class AfstandTabel{
  // hier komen de prototypen en leden van deze class
  private:
    int afstandTabel[4][4];
  public:
    AfstandTabel(); // dit is de constructor
    int getInhoud(int rij, int kolom);
};

// hier komen de implementaties

// implementatie van de constructor
AfstandTabel::AfstandTabel(){
     afstandTabel[4][4] ={{12,12,12,12},{12,12,12,12},{12,12,12,12},{12,12,12,21}};

// implementatie van getInhoud
int AfstandTabel::getInhoud(int rij,int kolom) {
    int cijfer = afstandTabel[rij][kolom];
    return cijfer;
}
C arrays hebben geen assignment. C++ heeft std::vector, die heeft het wel :
C++:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;      

class AfstandTabel {
  // hier komen de prototypen en leden van deze class
  private:
    std::vector<std::vector<int> > afstandTabel;
  public:
    AfstandTabel();
    int getInhoud(int rij, int kolom);
};

// hier komen de implementaties

AfstandTabel::AfstandTabel() :
  afstandTabel (
    std::vector<std::vector<int> >( 4,
      std::vector<int>( 4, 12 ) ) )
  {
  }
  int AfstandTabel::getInhoud(int rij,int kolom) {
    return afstandTabel[rij][kolom];
  }
};

Tip: gebruik commentaar alleen om dingen te schrijven die je op
geen enkele manier in source kunt schrijven. Dit is dus fout:
C++:
1
int i = 5; // i is nu 5

Dit ook:
C++:
1
int i = foo(); // i is nu 5

Dit niet:
C++:
1
2
int i = foo();
assert( i == 5 );

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


Verwijderd

Topicstarter
Hoe kan dat in het boek dit staat?

code:
1
2
3
4
5
int voorraad[ 2 ] [ 2 ] =
{
    {12,6},
    {6,12}
};

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 10 juni 2004 @ 17:30:
Hoe kan dat in het boek dit staat?

code:
1
2
3
4
5
int voorraad[ 2 ] [ 2 ] =
{
    {12,6},
    {6,12}
};
Bij de declaratie mag je wel direct initialiseren.

Professionele website nodig?


Verwijderd

Topicstarter
maar als ik dat in men programma ook doe dan doet ie het ook nie

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ben je zeker dat jij ook die int erbij zet? Dat je het dus bij de declaratie doet ?

https://fgheysels.github.io/


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Let wel, je initialiseert daarmee een lokale of globale variabele, geen class member.

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


Verwijderd

Topicstarter
ok ik ben dus duidelijk nog niet goed in c++. Maar ik heb dus ook gezocht op i net en gevonden dat het maken van een tweevoudig array in de main() geen probleem is. Maar om mijn vraag mischien wat duidelijker te maken. Hoe maak ik een tweevoudig array in een class die niet de main() bevat?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gewoon zoals je nu doet, je probleem is slechts het initialiseren van de array. Als ze allemaal 12 moeten zijn, zoals in je voorbeeldcode, dan kun je het toch ook gewoon met een loopje doen :?

C++:
1
2
3
4
5
6
AfstandTabel::AfstandTabel ()
{
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++)
            afstandTabel[i][j] = 12;
}



Of desnoods definieer je een statische array met je waarden, en kopieer je de inhoud van die array naar die van je class in de constructor

[ Voor 45% gewijzigd door .oisyn op 10-06-2004 22:57 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
Verwijderd schreef op 10 juni 2004 @ 18:53:
maar als ik dat in men programma ook doe dan doet ie het ook nie
Je mag op die manier alleen static of const members initialiseren, maar dan wel bij de definitie, niet bij de declaratie.

Gebruik nou maar een vector, ben je van het hele probleem af.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
ok dan ga ik dat proberen kan die ook tweevoudig zijn dan een vector ?

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Je kunt gewoon een vector van vectors van int maken. Net zoals je eerst een array van arrays van int had.

Bekijk het voorbeeld van MSalters nog eens.

"He took a duck in the face at two hundred and fifty knots."


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 10 juni 2004 @ 23:20:
ok dan ga ik dat proberen kan die ook tweevoudig zijn dan een vector ?
Als jij wil ook viervoudig:
C++:
1
vector<vector<vector<vector<int> > > >     MyLeetArray;


Let op de spaties tussen de sluithaken, als je die niet zet word je gillend gek van de onverklaarbare errors ;)

Professionele website nodig?


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Ik vind die vectors van vectors een knap waardeloos alternatief voor echte multidimensionele arrays. Je moet ze eerst allemaal goed sizen en je houdt altijd de mogelijkheid van jagged arrays open. Verder zitten er allemaal performance issues aan omdat je op deze manier gruwelijk veel objecten moet gaan zitten alloceren en vele te veel indirecties nodig hebt om het juiste element te vinden. Tenslotte heeft een vector geen inherente grootte dus wordt uit je code nooit duidelijk dat je vector een vast aantal elementen zal bevatten.

C en C++ ondersteunen niet voor niets mooie multidimensionele arrays in een aansluitend stuk geheugen; zonde om die niet te gebruiken in een situatie waarin de hoeveelheid elementen at compile time vast staan.Voor het overige werk zijn vectors geschikt.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
Soultaker schreef op 11 juni 2004 @ 01:50:
Ik vind die vectors van vectors een knap waardeloos alternatief voor echte multidimensionele arrays.
Zolang je een wrapper schrijft om je multidimensionale array vind ik het geen probleem; code die volstaat met MijnArray[x][y][z] dingen vind ik altijd erg lastig lezen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
De syntax om een element te benaderen van een vector<vector<vector<Type> > > is exact hetzelfde hoor. ;)

  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Ik zou dan ook willen voorstellen als je zo'n leete array maakt om die in een class te wrappen en de () operator te overloaden zodat je op de onderstaande manier access hebt tot de elementen:

code:
1
2
leeteArray(3,2,1)=3;
leeteArray(a,b,c)=foo();


ipv

code:
1
2
leeteArray[3][2][1]=3;
leeteArray[a][b][c]=foo();


Maakt het leesbaarder en je kan zelf je range checking doen :)

edit: mmmz dit is ongeveer wat farlane ook voorstelde.. compleet overheen gelezen |:(. Nouja, doe er je voordeel mee!

[ Voor 14% gewijzigd door 12_0_13 op 11-06-2004 15:25 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een andere operator introduceren dan [] voor array access vind ik eigenlijk best vies. Je kunt de [] niet voor niets overloaden :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
Maar bij het overloaden van () kan je makkelijk meerdere argumenten meenemen.

Voor een interessante discussie hierover klik hier

en dan 13.8 en 13.9.

En verder is het natuurlijk een kwestie van smaak en wennen :)

[ Voor 23% gewijzigd door 12_0_13 op 11-06-2004 16:56 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

12_0_13 schreef op 11 juni 2004 @ 16:50:
Maar bij het overloaden van () kan je makkelijk meerdere argumenten meenemen.
en het voordeel daarvan is... :?
(Ze proberen in 13.9 te beweren dat je met () dingen kunt doen die je met [] niet kunt doen, maar dat is gewoon onzin)

[ Voor 23% gewijzigd door .oisyn op 11-06-2004 18:38 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Dat zeggen ze nog niet eens zozeer, maar dat het makkelijker is om met operator() te werken, dus waarom zou je het niet doen? Het antwoord op die retorisch bedoelde vraag kan zijn: omdat het syntactisch helderder is om operator[] te gebruiken om elementen uit een array te halen.

Ik ben het overigens wel met de C++ FAQ eens dat het aanzienlijk makkelijker is om allerlei bijzondere dingen met operator() te doen omdat je toch al je argumenten in een keer beschikbaar hebt, terwijl je met operator[] noodzakelijkerwijs eerst allerlei tijdelijke objecten moet introduceren omdat je steeds maar een argument tegelijk kunt verwerken. De vraag is of het acceptabel is om een ingewikkeldere implementatie te schrijven om de interface beter te maken; voor code die voor hergebruik bedoeld is (zoals met code voor matrices en dergelijke vaak het geval is) lijkt dat me wel het geval.

  • Viva Vince
  • Registratie: Oktober 2002
  • Laatst online: 07-11-2024
C++:
1
2
3
4
5
// implementatie van de constructor
AfstandTabel::AfstandTabel(){
     afstandTabel[4][4] ={{12,12,12,12},{12,12,12,12},{12,12,12,12},{12,12,12,21}};

// implementatie van getInhoud 

De } die miste was al gevonden. Nevermind... en als assignment gaat het idd niet lukken

[ Voor 101% gewijzigd door Viva Vince op 11-06-2004 19:30 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Wat is nu je punt Viva Vince?

  • Viva Vince
  • Registratie: Oktober 2002
  • Laatst online: 07-11-2024
Soultaker schreef op 11 juni 2004 @ 21:43:
Wat is nu je punt Viva Vince?
Mijn punt is dat ik eigenlijk niks nieuws te melden had, maar daar een beetje te laat achter kwam. :z Was er wel achter gekomen(dat ik niks meer melde), maar had het er niet meer bijgeschreven.

[ Voor 17% gewijzigd door Viva Vince op 12-06-2004 02:42 ]

Pagina: 1