Toon posts:

[C++] Reference in klasse

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik ben een programma aan het maken dat bmp's inleest (ja, jullie kennen hem nog wel), en ik wil een public reference maken naar een private (unsigned) int in diezelfde klasse (ik neem aan dat dit moet kunnen?), aangezien ik de breedte en hoogte nodig heb om de scherm grootte aan te passen..

Ik heb dus mijn klasse bmpformat:

C++:
1
2
3
4
5
6
7
8
9
10
class bmpformat {
public:
    unsigned int& xsize; //de references
    unsigned int& ysize; //ik kan ze hier nog niet initialiseren

    bmpformat() { //default constructor
          xsize=bmp.header.width; //bmp=instance van helemaal private struct, met struct header, waarin unsigned int width en height zitten.
          ysize=bmp.header.height;      
    }
}

Enfin, als ik ga compilen, krijg ik de volgende error van MS Visual C++ 6.0:

code:
1
2
c:\bmploader\bmp.cpp(18) : error C2758: 'xsize' : must be initialized in constructor base/member initializer list
        c:\bmploader\bmp.cpp(10) : see declaration of 'xsize'

Nogal raar, aangezien dat nou precies is wat ik doe en wil?!

Verwijderd

Een reference moet je altijd initialiseren bij declaratie. Immers, een reference is just that: een referentie naar iets. Je moet dus wel zeggen waar naartoe. Waarom moeten dat references zijn? Waarom niet gewoon ints?
Sowieso twijfelachtig... public variabelen?

[ Voor 44% gewijzigd door Verwijderd op 07-06-2003 20:05 ]


Verwijderd

Topicstarter
uhm, nouja variabelen, ze moeten gewoon constant zijn.. ff wat data doorgeven. Maar aangezien ik net iets over references gelezen heb (ja, ben redelijk nieuw met c++) wilde ik die ff uitproberen. Maar als ik ze van te voren initialiseer gaat het ook helemaal niet goed (20 fouten ofzo).

Verwijderd

Verwijderd schreef op 07 juni 2003 @ 20:11:
uhm, nouja variabelen, ze moeten gewoon constant zijn.. ff wat data doorgeven. Maar aangezien ik net iets over references gelezen heb (ja, ben redelijk nieuw met c++) wilde ik die ff uitproberen. Maar als ik ze van te voren initialiseer gaat het ook helemaal niet goed (20 fouten ofzo).
Als ze constant moeten zijn, moet je ze gewoon const definieren, en in je intialiser list van je constructor initialiseren.

Wat ik verder niet snap is waar en wanneer die private struct geinitialiseerd wordt. Je wil de waarden van xsize en ysize initialiseren in je constructor op basis van een private struct. Dat is een op z'n minst eigenaardige gang van zaken. Waarom verander je constructor dan nie zo dattie zo'n struct als argument heeft. Die struct die je dan meekrijgt sla je dan op in je private dingetje. Overig kun je deze dan niet const maken, maar dat lijkt me geen probleem want waarom zouden ze const moeten zijn?

[ Voor 6% gewijzigd door Verwijderd op 07-06-2003 20:18 ]


Verwijderd

Topicstarter
Het principe is dus, dat de hele bmp. struct uit een bestand wordt gelezen. Ik kan dus ook gewoon een public int sizex maken, en dan in de code van klasse die waarde erin proppen als het bestand gelezen is.

Ik wil dit dus niet, dat is toch niet echt netjes, twee variabelen met dezelfde waarde? Ik wil dat sizex altijd 'point' naar bmp.header.width, zodat ik die waarde er gewoon uit kan halen, terwijl hij private is. Dit zou dus kunnen met een pointer, maar dat moet toch ook met een reference kunnen?

Of zie ik het begrip 'reference' nu gewoon verkeerd?

Verwijderd

Verwijderd schreef op 07 June 2003 @ 20:21:
Het principe is dus, dat de hele bmp. struct uit een bestand wordt gelezen. Ik kan dus ook gewoon een public int sizex maken, en dan in de code van klasse die waarde erin proppen als het bestand gelezen is.

Ik wil dit dus niet, dat is toch niet echt netjes, twee variabelen met dezelfde waarde? Ik wil dat sizex altijd 'point' naar bmp.header.width, zodat ik die waarde er gewoon uit kan halen, terwijl hij private is. Dit zou dus kunnen met een pointer, maar dat moet toch ook met een reference kunnen?

Of zie ik het begrip 'reference' nu gewoon verkeerd?
Ik blijf het merkwaardig vinden maar als je het echt zo wil maken, dan heb je geen keus, dan moet je een pointer gebruiken, met als nadeel dat je pointer naar crap wijst zolang je struct nog niet geinitialiseerd is.

Mijns insziens probeer je nu dingen die op zich private zijn, via een truuk public toegankelijk te maken. Waarom heeft jouw bitmap class niet een GetLength() en GetWidth(). Deze 2 kunnen dan netjes de waarden uit die private struct retourneren.

Nogmaals, met referenties kan dit niet werken, omdat een reference altijd moet verwijzen naar een bestaande variabele. Een reference is simpel een andere naam voor hetzelfde ding. Verander je de reference, dan verandert het origineel mee, en andersom.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
'xsize' : must be initialized in constructor base/member initializer list
daarmee wordt dit bedoeld (iirc):
C++:
1
bmpformat() : xsize(x), ysize(y) {}

Verwijderd

Topicstarter
ok, ik denk dat je wel gelijk hebt. Met die functies is het natuurlijk ook perfect ja..

Bedankt hor, topic mag weer dicht :).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 07 June 2003 @ 20:30:
Bedankt hor, topic mag weer dicht :).
lees de faq :{

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.

Pagina: 1