Zum Inhalt springen

Struct im Konstruktor initiallisieren


Empfohlene Beiträge

Hallo Leutz,

ich habe eine Klasse in der ich einen Struct deklariere.

struct sField {

CString Feld1;

CString Feld2;

CString Field3;}

Jetzt möchte ich, das beim Start vom Programm ein Array aus dem struct mit Inhalt erzeugt wird. Damit das Objekt immer komplett neu erzeugt wird, möchte ich dies im Konstruktor machen. Das Array muss für alle Methoden zur Verfügung stehen. Das Array wird wie folgt gefüllt:
sField arSearchFields = {

{"Wert1", "Wert2", "Wert3",};

{"Wert1", "Wert2", "Wert3",};

{"Wert1", "Wert2", "Wert3",};

{"Wert1", "Wert2", "Wert3",};}
Die größe des Array mit den Werten wird erst im Konstruktor festgestellt. Ich bekomme es einfach nicht hin, das Array so zu befüllen, das mit alle Werte in allen Methoden dieser Klasse zu Verfügung steht. Was mache ich falsch, oder was habe ich vergessen. Das Feld arSearchFields ist in der Klasse wie folgt hinterlegt:
CStringArray arSearchFields

Gruß aus Hanau

Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deiner Beschreibung nach stell ich mir das grad so vor:


struct sField 

{

CString Feld1;

CString Feld2;

CString Field3;

}


class cMyClass

{

private:

  sField* ar; // Das ist dein Array

public:

  cMyClass(int Anzahl) 

  {

    // Das Array im Speicher erstellen

    ar = new sField[Anzahl];

    // jetzt noch das Array befüllen

    // Zugriff über 

    ar[0].Feld1

  }


  // HIer eine Memberfunktion die mit dem Array was Anstellt

  const sField* GetItem(int n)

  {

    // Hier evtl. Prüfung ob n ein gültiger INdex ist

    return ar[n]; 

  }

}

Hoffe das habe ich so richtig verstanden????

Greetz

Diablo999

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Patrick,

denk dran, dass deine Struktur CString-Elemente enthalten. CString ist 'ne Klasse, und kein Datentyp! Wenn du also vor hast eine Instanzvariable der Klasse bereits beim Erstellen mit Werten zu füllen, dann brauchst du nen entsprechenden Konstruktor:


struct sField

{

	CString Feld1;

	CString Feld2;

	CString Feld3;


	//Konstruktor der Struktur

	sField(CString f1,CString f2,CString f3) { Feld1=f1; Feld2=f2;Feld3=f3; };

};

Damit lässt sich dann folgendes tun:

	sField test = sField("1","2","3");

Beachte weiterhin, dass CStringArray ebenfalls eine Klasse ist! Man kann zwar auf die einzelnen Elemente im Array über die Indexierung zugreifen, aber Elemente (und dabei handelt es sich um CString-Elemente) hinzufügen geht mit der Memberfunktion Add() :

	CStringArray strArTest;

	strArTest.Add("1");

	strArTest.Add("2");

	strArTest.Add("3");


	CString strValue = strArTest[0]; // Indexwerte 0..2 verwenden!

Ich hoffe, dass dir das weiterhilft...

(Eine Mögliche Lösung hat ja bereits Diablo999 geliefert)

Ciao

Manfred

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...