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 <
010
09.08.2005, 13:20 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


für diese art der Initialisierung ist der Konstruktor deiner Klasse zuständig und für das freigeben der Destruktor... ggf kannst du dir den Aufwand aber auch sparen und als member z.B. eine Containerklasse aus der STL verwenden die dir den ganzen aufwand abnimmt...

an sonsten mal so als Beispiel dahingekladert...


C++:
class myClass{
public:
myClass();
~myClass();
private:
double *myarray;



};
myClass::myClass(){myarray= new double[4711];}

myClass::~myClass(){delete [] myarray;}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
09.08.2005, 16:24 Uhr
~GiantGeorge
Gast


jo danke schon mal !

wie sehe denn das dieser Containerklasse aus ? Was kann die überhaupt ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
09.08.2005, 18:09 Uhr
~GiantGeorge
Gast


also irgendwie komm ich doch noch überhaupt nicht klar
das zweidimensionale Array meine ich relativ gut implementiert zu haben.
Ok, ich hab jetzt auch versucht einen Konstruktor zu verwenden, aber ohne eine zusätzliche init-Funktion komm ich irgendwie nicht aus.

[
C++:
#include <iostream>

using namespace std;


int n, NumberBlocks;

class Block{
    public:
        double **AW;
        double **AE;
        double **AN;
        double **AS;
        //usw.
        Block(int size){
            AW = init(AW, size, size);
            AE = init(AE, size, size);
            AN = init(AN, size, size);
            AS = init(AS, size, size);
        }
            
        double** init(double**, int, int);
        void change();
        
};

double** Block::init(double **x, int Rows, int Cols){
    int i;
    x = new double*[Rows];
    for (i=0; i<Rows;i++){
        x[i]=new double[Cols];    
    }
    return x;
}
    
void Block::change(){
    int i, j;
    for (i = 0; i < n; i++){
        for (j = 0; j < n; j++){
            AW[i][j]=2;
        }
    }
}

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]= new Block(n);
    BigBlock[2].change();
}




Der Compiler spuckt folgendes aus:
Klassen.cpp: In function `int main(int, char**)':
Klassen.cpp:67: error: no matching function for call to `Block::Block()'
Klassen.cpp:8: error: candidates are: Block::Block(const Block&
Klassen.cpp:15: error: Block::Block(int)
Klassen.cpp:68: error: invalid conversion from `Block*' to `int'
Klassen.cpp:68: error: initializing argument 1 of `Block::Block(int)'

Also wenn mir da einer weiterhelfen könnte, ich wäre endlos dankbar !!!

Dann hätte ich noch ein paar grundsätzliche Fragen:
Kann ich überhaupt ein Array von denselben Objekten, die allerdings verschiedener Größe sind, einrichten?
In meinem Fall wären dann die Blöcke verschieden groß, wobei alle Blöcke im Array BigBlock
liegen.
Und was ist eigentlich der Unterschied zwischen
*double;
und
double[];

Schon mal herzlichsten Dank für eure Hilfe !

Gruß,
GiantGeorge
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
09.08.2005, 20:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
Block BigBlock[NumberBlocks];


so etwas kann zum einen nur klappen, wenn es von der Klasse Block einen Konstruktor ohne Paramter gibt andernfalls müsstest du für sowas ein pointerarray anlegen... davon abgesehen ist auch fraglich ob dein compiler es frisst wenn du staticlike ein array anlegst aber die grösse erst zur laufzeit ermittelst...


Zitat:

BigBlock[2]= new Block(n);


das kann natürlich dann erst erst recht nicht gehen.. BigBlock[2] wäre wenn es denn wie von dir gedacht gehen würde ein Objekt der Klasse Block... new Block(n) liefert dir aber ein zeiger auf ein solches auf dem heap angelegtes objekt...


du könntest deine etwas exotisch anumtendes array deiner klasse so erzeugen...

C++:
Block **BigBlock;
BigBlock= new Block*[n];
for(int i=0;i<n;++i) BigBlock[i] = new Block(i);  //oder wenns nicht i sein soll von was auch immer...


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
10.08.2005, 01:34 Uhr
~GiantGeorge
Gast


cool danke windalf ! funktioniert einwandfrei
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
10.08.2005, 13:59 Uhr
(un)wissender
Niveauwart


Und das delete nicht vergessen!
--
Wer früher stirbt ist länger tot.
 
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: