Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » arrays in klassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
03.08.2005, 13:03 Uhr
~skilfingr
Gast


also ich bin ziemlich neu bei c++, habe vorher aber schon ein bisschen mit java und pyhton programmiert.
ich weiß, dass ich bei c und c++ arrays beim deklarieren auch gleich definieren kann, also:

int fasel[]={1,2,3}

wenn ich das ganze in einer klassendefinition mache, etwa so hier:


C++:
class bla
{
public:
        int fasel[]={1,2,3};
    bla(void);
    ~bla(void);
};


bekomme ich aber einen fehler. kann mir vielleicht jemand sagen, warum und wie ich das ganze vermeide.

ich könnte natürlich folgendes machen:

C++:
class bla
{
public:
        int fasel[];
    bla(void);
    ~bla(void);
};

bla::bla(void){
        fasel[0]=1;
        fasel[1]=2;
        fasel[2]=3;
}



aber das ist mir bei mehr als 10 arrays ehrlich gesagt zu umständlich und läßt sich auch schwerer lesen

mod edit: benutze die CPP Tags selber!

Dieser Post wurde am 03.08.2005 um 13:31 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.08.2005, 13:17 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


in der klassendeklaration kannste keine variablen initialisieren, d.h geht nur z.b im Konstruktor
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.08.2005, 16:40 Uhr
typecast
aka loddab
(Operator)


Wie waere es damit:


C++:
for (int = 0; i != 3; ++i) {
  fasel[i] = i + 1;
}


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.08.2005, 19:54 Uhr
Pablo
Supertux
(Operator)


typcast meint for(int i=0...
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.08.2005, 09:39 Uhr
~skilfingr
Gast



Zitat von typecast:
Wie waere es damit:


C++:
for (int i = 0; i != 3; ++i) {
  fasel[i] = i + 1;
}




das geht leider nur in meinem (vereinfachten) beispiel, aber in meinem fall handelt es sich bei den zugewiesenen werten um zahlen, die sich nicht in abhängigkeit vom zähler errechnen lassen.

schade, dass dieser nützliche mechanismus in klassen nicht mehr funktioniert
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.08.2005, 11:03 Uhr
Pablo
Supertux
(Operator)



Zitat von ~skilfingr:


das geht leider nur in meinem (vereinfachten) beispiel, aber in meinem fall handelt es sich bei den zugewiesenen werten um zahlen, die sich nicht in abhängigkeit vom zähler errechnen lassen.

schade, dass dieser nützliche mechanismus in klassen nicht mehr funktioniert


nützlich vielleicht, aber vom Konzept her denke ich, dass es wenig Sinn machen würde, wenn das ginge. Denn Klassen an sich sind abstrakte Konstrukte, die die Beschreibung von "Datentypen" darstellen und da passt die Zuweisung nicht.

Dafür ist auch der Konstruktor da, um die Members einer Klasse zu initialisieren. Außerdem finde ich das besser so, weil wenn man zum Beispiel von dieser Klasse eine andere ableitet, muss man nicht unbedingt die selben Werten haben.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.08.2005, 11:34 Uhr
~skilfingr
Gast


so gesehen hast du sicher recht. allerdings hat sich dadurch die anzahl der code zeilen von 20 auf 60 verdreifacht. außerdem handelt es sich hier in meinem fall, um so eine art konstanten, die in allen instanzen der klasse benötigt werden. ich hab auch schon versucht diese felder außerhalb der klasse zu definieren, aber da bekomme ich dann fehler beim linken und da bin ich hoffnungslos verloren ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.08.2005, 11:40 Uhr
Tommix



Hallo,
in dem Fall kannst Du das Array statisch machen und schon geht, was Du Dir vorstellst:

C++:
// Header:
// ...
public:
    static int fasel[];
// ...

// Cpp:

int bla::fasel[] = {1, 2, 3};



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.08.2005, 15:40 Uhr
~skilfingr
Gast


danke! das ist genau das, was ich suche.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.08.2005, 12:46 Uhr
~GiantGeorge
Gast


Hi erstmal !
bin auch ziemlich neu in c++ und mein Problem gleicht dem von skilfingr, nur dass es noch eine Stufe komplexer ist:
In der Klasse Block sind einige 2-D Arrays (AW, AS....) , die zur Laufzeit dynamisch allokiert werden sollen.
Da ich die Größe n x n der Arrays ja nicht direkt in die Klasse schreiben darf, wollte ich eine Funktion init schreiben, die die Arrays initialisiert. Nur darin liegt mein Problem!

C++:
class Block{
    public:
        double AW[][];
        double AE[][];
        double AN[][];
        double AS[][];
        //usw.
        void init(int);        
};

void Block::init(int size){    
        AW =  double[size][size];
}

int main(int argc, char *argv[]){    
    if (argc < 3) {
        cerr << "Geben Sie der Funktion einen Parameter, der die Anzahl der Iterationen angibt, mit.";
    }
    else {
        printf("else anweisung");
        n = atoi (argv[1]);
        NumberBlocks = atoi (argv[2]);
    }
    Block BigBlock[NumberBlocks];
    BigBlock[2].init(n);
}




Von der Klasse Block sollen übrigens wieder viele Instanzen in ein Array BigBlock abgelegt werden.
Wer super wenn mir da einer helfen könnte !!

Gruß
GiantGeorge
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: