[.NET] C++ Pointer auf eine eigene Klasse funktioniert nicht

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Farin, 22. Juni 2009 .

  1. 22. Juni 2009
    C++ Pointer auf eine eigene Klasse funktioniert nicht

    Nabend,

    wir sollten für die Berufsschule ein kleine Programm schreiben... Nur leider klappt das nicht so wie ich mir das vorgestellt habe .^^ Da ich mehr der Vbler bin anstatt c++ler hoffe ich einfach mal das mir jemand weiter helfen kann.

    Also zum Problem... ^^. Ich möchte von der Klasse Kontakt ein Array Pointer erstellen. Was ja grundsätzlich erstmal so geht (hoffe ich zumindest)

    Code:
    Kontakt^ liste = gcnew Kontakt[100];
    aber dann spuckt er mir halt immer folgenden Fehler aus

    Fehler 1 error C3845: "Kontaktliste::liste": Nur statische Datenmember können innerhalb einer Verweisklasse oder eines Werttyps initialisiert werden.

    Nunja jemand eine Idee. Beide Klassen:

    Kontakt.h

    Code:
    #pragma once
    
    using namespace System;
    ref class Kontakt
    {
    
    public:
     Kontakt(String^, String^, DateTime, bool, String^, String^, String^, String^, String^);
     void setVorname(String^);
     void setName(String^);
     void setGeb(DateTime);
     void setMaennlich(bool);
     void setStrasse(String^);
     void setPLZ(String^);
     void setOrt(String^);
     void setTelefon(String^);
     void setEmail(String^);
    
     String^ getVorname();
     String^ getName();
     DateTime getGeb();
     bool getMaennlich();
     String^ getStrasse();
     String^ getPLZ();
     String^ getOrt();
     String^ getTelefon();
     String^ getEmail();
     String^ getAnrede();
    
    private:
     String^ vorname;
     String^ name;
     DateTime gebdat;
     bool maennlich;
     String^ strasse;
     String^ plz;
     String^ ort;
     String^ telefon;
     String^ email;
     String^ anrede;
     
    };
    
    Kontaktliste.h

    Code:
    #pragma once
    #include "Kontakt.h"
    
    ref class Kontaktliste
    {
    public:
     Kontaktliste(void);
     //void add_Kontakt();
     //void del_Kontakt();
     //void suche_Kontakt();
    
    private:
    
     Kontakt^ liste = gcnew Kontakt[100];
    
    };
    
    LG Farin
     
  2. 22. Juni 2009
    AW: C++ Pointer auf eine eigene Klasse funktioniert nicht

    Jo, steht eigentlich schon in der Fehlerliste
    Du kannst normale Variablen nicht in der Klassendeklaration initialisieren. Dazu is der Konstruktor gut:

    Code:
    // Kontaktliste.h
    ....
    Kontakt^ liste;
    ....
    
    // Kontaktliste.cpp
    Kontaktliste::Kontaktliste()
    {
     liste = gcnew Kontakt[100];
    }
    ka ob das so funzt, mit C++/CLI hab ich nich soviel am hut
     
  3. 22. Juni 2009
    AW: C++ Pointer auf eine eigene Klasse funktioniert nicht

    Jaien ich kann ja auch einen String in der Klassendeklaration machen... Warum sollte das nicht mit einer eigenen Klasse gehen. Außerdem brauche ich die Variable der Klasse in der Kontaktliste... Sonst kann ich damit nicht global arbeiten... Den wenn ich es im Konstruktor deklariere ist dies nur lokal gültig und nicht global...

    Denn ich verstehe den Fehler nicht so ganz. Bzw. ich verstehen ihn weiss aber nicht wie ich ihn lösen soll...

    LG Farin
     
  4. 23. Juni 2009
    AW: C++ Pointer auf eine eigene Klasse funktioniert nicht

    Hmm noch eine andere idee vll ? oO


    Das problem ist das .net die Variable verwaltet... und das ist so weil die Klasse verwaltet ist. Und die muss wiederum verwaltet sein damit ich ein System::String nutzen kann... Denn den brauche ich wiederum für die Windows-Form, damit ich in den TextBoxen usw. Schreiben kann... Ansonsten muss ich aj ständig umkonvertieren und das ist ja viel zu umständlich... Aber ich habe einfach keine idee wie ich das sonst lösen soll



    //Edit

    Problem gelöst... musste in die Klasse geschrieben werden

    Code:
    Array^ meinArray;
    und unter dem Konstruktor werden dann die Kontakte eingelesen.
    Code:
    meinArray = Array::CreateInstance(Kontakt::typeid, 100);
    //Hier ne schleife hin
    meinArray->SetValue(meinKontakt, index);
     
  5. 30. Juni 2009
    AW: C++ Pointer auf eine eigene Klasse funktioniert nicht

    ist das c++? was bedeutet denn Kontakt^ liste??? ich meine [^] ist das jetzt das gleiche wie Kontakt* liste???

    Default Constructor Kontaktliste(){}; und keine Argumente. komischer weise funktioniert auch so xD (Kontaktliste(void)

    und das hier Pyro hat Recht:
    private:
    Kontakt^ liste = gcnew Kontakt[100];

    würde nie funktionieren, weil es dynamisch ist. das muss in den konstruktor.

    das ist statisch:
    Kontakt* mPointer;
    Kontakt mKontakt;
    -----------------------
    private:

    Kontakt* mPointer;
    int anzahl;

    public:
    Kontaktliste(int anzahl)
    {
    this.anzahl = anzahl;
    mPointer = new Kontakt[anzahl];
    }
     
  6. 30. Juni 2009
    AW: C++ Pointer auf eine eigene Klasse funktioniert nicht

    Hi,

    ja das ist c++.net Und Kontakt^ liste ist das "gleiche" wie Kontakt* liste. Nur mit dem unterschied das "^"-zeichen bewirkt, das die Klasse verwaltet wird. Mit dem "*"-zeichen dagegen wird die Klasse nicht verwaltet und um unter c++.net die .net elemente ansprechen bzw. benutzen zu können muss eine Klasse verwaltet werden. (Zumindest habe ich das so verstanden. Denn wenn du es anders Versuchst kommt auch die Fehlermeldung das die Klasse bzw. das Objekt nicht erstellt werden kann, da es sich um ein nicht verwaltetes Objekt handelt).

    Ja das mit dem dynamisch kam hinterher bei mir auch an... Ich weiss nicht was ich da machen wollte und wie ich dadrauf gekommen bin xD^^, aber nach dem ich das verstanden hatte, was der Fehler war, habe ich den Wald wieder gesehen .

    Nun ja da man so nun kein Array mehr erzeugen kann musste ich das über die Array-Klasse machen die von .net gestellt wird... Nun ich kann das ding mit Objekten zwar füllen... Aber habe noch nicht hinbekommen diese auch wieder zu lesen xD^^. Aber ich denke das wird schon .

    Wenn ich doch noch etwas falsch gemacht oder eine andere Lösung habe werde ich es hier nocheimal schreiben... ^^

    Ich hoffe ich habe deine Frage beantwortet

    LG Farin
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.