Hallo,
ich habe zwei Klassen deklariert. In der zweiten Klasse (Y) will ich dynamisch eine Variable „dynam“ aus der ersten Klasse (X) deklarieren. Leider funktioniert das, was ich gemacht habe, nicht. Es müssen zwei Parameter übergeben werden. Die zweite Deklaration funktioniert ebenfalls nicht. Kann mir jemand helfen???
class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;
Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }
~Y() {
delete dynam;
delete a;
}
};
Maria
Hallo,
ich habe zwei Klassen deklariert. In der zweiten Klasse (Y)
will ich dynamisch eine Variable „dynam“ aus der ersten Klasse
(X) deklarieren.
Y(int T, int M) {
dynam = new X[A]; //???
das sind doch Arrya oder ?
a = new int*[T,M]; //??? }
und das ist auch nen Array
~Y() {
delete dynam;
also musst du auch array löschen
delete[] dynam;
delete a;
delete[] a;
Maria
Heisst [] gebe ganzen Vector frei
Sascha
Hallo Maria!
Hier meine Neufassung, müsste jetzt laufen:
class X{};
class Y {
private:
int A;
// sollten auch private sein:
X\* dynam;
int \*\*a;
const int SIZE;
public:
Y(int T, int M)
:
// braucht Init-Liste. 10, oder was Du willst; du nimmst sonst Speichermüll als Groesse;
// erst initialisieren, dann verwenden.
A(10), dynam(0), a(0), SIZE(T+M) // so recht, T+M?
{
// sollte jetzt gehen
dynam = new X[A]; // A war Speichermüll
// Du willst eine Anzahl Einzel-Zeiger auf dem Doppel-Zeiger anhaengen, gut;
// genuegt aber eine Konstante voll für die Groesse. die kannst Du dann auch im Destruktor verwenden.
a = new int\*[SIZE];
// das sind dann SIZE einzelne Zeiger;
int i;
for (i=0; ; i
Falls Du mit einer Tabelle (Matrix) was vorhast, mache dir am Besten eine "class Zeile", und mit der dann ein einfaches Array, also:
class Zeile{};
// dann:
Zeile \*Z = new Zeile[SIZE];
lg
Martin
> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>
Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???
class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;
Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }
also ein Konstructor kann initalisiert werden mit einer new classe(int Y, int X)
womit wir bei
a = new int(Y,X)
bei new Typ[] ist aber keine Initalisierungs Übergabe möglich
das muss mit Typvar.Init(X,Y) gemacht werden 
und Init ist eine selbst zu definierender Member
gruss
Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???
class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;
Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }
also ein Konstructor kann initalisiert werden mit einer new
glaube ich nicht. Du kannst Varriable und Konstante init., den Konstruktor aber nicht.
Das „new“ ist bloss für Zeiger.
classe(int Y, int X)
womit wir bei
a = new int(Y,X)
Uuuups, " a " ist ein Doppelzeiger, ob da " new int* " nicht besser waere?
lg
Martin
Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???
class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;
Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }
also ein Konstructor kann initalisiert werden mit einer new
glaube ich nicht. Du kannst Varriable und Konstante init., den
Konstruktor aber nicht.
Das „new“ ist bloss für Zeiger.
Irrtum . mit new Erzeugte Objecte können mit überladenem Konstructor auch Initalisiert werden.
Lediglich greift new[] nur auf den default (also nicht überladen) Konstruktor zu.
classe(int Y, int X)
womit wir bei
a = new int(Y,X)
Uuuups, " a " ist ein Doppelzeiger, ob da " new int* " nicht
besser waere?
lg
Martin
Lieber martin ich bezog mich nicht auf ihr Beispiel
sondern auf mein Beispiel
wo int Y und int X
dann ist a auch ein int (aber eben mit initialisierung mit überladenenem Konstuctor;
Hallo,
Die
zweite Deklaration funktioniert ebenfalls nicht. Kann mir
jemand helfen???
class X{};
class Y {
private:
int A;
public:
X* dynam;
int **a;
Y(int T, int M) {
dynam = new X[A]; //???
a = new int*[T,M]; //??? }
also ein Konstructor kann initalisiert werden mit einer new
glaube ich nicht. Du kannst Varriable und Konstante init., den
Konstruktor aber nicht.
Das „new“ ist bloss für Zeiger.
Irrtum . mit new Erzeugte Objecte können mit überladenem
Konstructor auch Initalisiert werden.
Lieber RakonDark,
Ich hatte bloss bedenken, dass deine Formulierung für AnfaengerInnen etwas verwirrend sein könnte; der K. ist ja ein Mittel zum Initialisieren.
Lediglich greift new[] nur auf den default (also nicht
überladen) Konstruktor zu.
Wo Du recht hast, hast Du recht!
classe(int Y, int X)
womit wir bei
a = new int(Y,X)
Uuuups, " a " ist ein Doppelzeiger, ob da " new int* " nicht
besser waere?
lg
Martin
Lieber martin ich bezog mich nicht auf ihr Beispiel
sondern auf mein Beispiel
wo int Y und int X
dann ist a auch ein int (aber eben mit initialisierung mit
überladenenem Konstuctor;
Alles klar!
lg
Martin