Class med int array

Tags:    c++

Hejsa.

Jeg vil gerne lave et array i en class. Jeg har forsøgt følgende:

Header:

class indhold
{
public:
indhold();
private:
int notes[4];
};


--------------------------------

.ccp-fil:

#include "header.h"

indhold::indhold()
{
notes={50,100,200,500};
};


--------------------------------------

I main funktionen skrives så:

#include "header.h"

int main()
{
indhold test;

return 0;

};



Jeg den melder fejl:
1: C2059: syntax error: '{'
2: C2143: syntax error: missing ';' before '{'
3: C2143: syntax error: missing ';' before '}'

Disse fejl siger den er i cpp-filen hvor constructoren er..

Hvad er der galt? :-(



Problemet er at en klasses constructor initialiserer alle klassens variable inden den udfører nogen funktioner.
Så når du kommer til
Fold kodeboks ind/udKode 
er notes allerede initialiseret - og {,,,}- metoden virker kun ved initialisering.
Den normale måde at komme uden om dette på er at bruge en initialiserings-liste i constructoren; a la
Fold kodeboks ind/udKode 

Desværre mener jeg ikke denne teknik virker for arrays.
En mulighed er at assigne hvert element for sig:
Fold kodeboks ind/udKode 

Dog ser det ud som om du altid vil give dit array de samme værdier (da din constructor ingen argumenter tager).
Hvis det er rigtigt kan du gøre din notes static, og initialisere den uden for klassen:
Fold kodeboks ind/udKode 

static variable bliver ikke initialiseret af klassens constructor, men en gang for alle ved programmets start. Men du skal så være opmærksom på at hvis du ændrer i notes vil det påvirke alle indhold objekter i dit program.



Indlæg senest redigeret d. 09.10.2008 13:48 af Bruger #8249
Hej igen.

Tusind tak for dit svar. Det er korrekt, at væriderne i notes er konstante.

Jeg har nu prøvet følgende:

HEADER:

class indhold
{
public:
// indhold(); --- SKAL DENNE ALLIGEVEL MED?
//private:
static int notes[4];
static int notes_left[4];
};

int indhold::notes[] = {50,100,200,500};
int indhold::notes[] = {0,0,0,0};


------


MAIN:

#include "header.h"
#include <iostream>
using std::cout;

int main()
{
indhold test;

cout << indhold::test.notes[1];
cout << indhold::test.notes_left[3];

return 0;
};


Jeg tror at dette umiddelbart virker... Skal constructoren indhold() med når den ikke lige umiddelbart bruges til at initialisere noget?


jeg har tilføjet endnu et array. Dette array skal altid være 0 ved programmets start, men får igennem programmet nye værdier.
Vil jeg kunne gøre samme trick som ved notes ved at erklære dem som en static?



Indlæg senest redigeret d. 09.10.2008 16:22 af Bruger #14048
// Slettet igen



Indlæg senest redigeret d. 09.10.2008 16:22 af Bruger #14048
Du skal kun have en constructor hvis den skal lave noget.

Variable i en class der er static, er delt mellem alle instanser af class'en, så hvis dine variable skal være delt mellem alle instanser, kan du godt bruge tricket med at lave dem static, ellers må du initialisere dem i constructoren.



Jeg siger mange tak for jeres hjælp!



t