error C2664: Konvertierung 'cli::array<Type> ^' in 'cli::array<Type,dimension> ^' nicht möglich



  • Hallo ich hab da ein kleines Problem...

    Ich habe ein .NET C# struct:

    public struct t_Data
            {
                public String m_sAtt;
                public String m_sField;
                public int m_iIdx;
            }
    

    Und eine Methode, die u.a. ein Array dieses Structs erwartet:

    public static int Init( t_Data[] aData ){}
    

    In meiner C++/CLI Warapper-Klasse habe ich die .NET-dll eingebunden und kann deren Methoden auch wunderbar nutzen. Nun habe ein Array:

    array<abc::Example::t_Data^>^ arData = gcnew array<abc::Example::t_Data^>(list.size());
    

    abc::Example stellt den Namespace in meiner .NET-dll dar. Dem Array habe ich ein paar Werte hinzugefügt, um anschließend der .NET-Funktion zu übergeben, was folgende Fehlermeldung produziert:

    error C2664: 'abc::Example::Init': Konvertierung des Parameters 1 von 'cli::array<Type> ^' in 'cli::array<Type,dimension> ^' nicht möglich
    1>          with
    1>          [
    1>              Type=abc::Example::t_Data ^
    1>          ]
    1>          and
    1>          [
    1>              Type=abc::Example::t_Data,
    1>              dimension=1
    1>          ]
    

    Wer kann helfen?



  • array<abc::Example::t_Data^, 1>^ arData = gcnew array<abc::Example::t_Data^, 1>(list.size());
    

    vielleicht?



  • Auf die Idee bin ich auch schon gekommen und habs trotzdem nochmal probiert, mit folgender Fehlermeldung:

    error C2664: 'abc::Example::t_Data': Konvertierung des Parameters 1 von 'cli::array<Type,dimension> ^' in 'cli::array<Type,dimension> ^' nicht möglich
    1>          with
    1>          [
    1>              Type=abc::Example::t_Data::t_Data ^,
    1>              dimension=1
    1>          ]
    1>          and
    1>          [
    1>              Type=abc::Example::t_Data::t_Data,
    1>              dimension=1
    1>          ]
    1>
    1>Fehler beim Erstellen
    

    Weitere Vorschläge?



  • Warum eigentlich t_Data**^**? Das ist doch ein struct , also ein Werttyp.



  • Okay, dann eben folgendermaßen:

    array<Type=abc::Example::t_Data, 1>^ arData = gcnew array<Type=abc::Example::t_Data>(list.size());
    

    Was leider dazu führt:

    error C2440: '=': 'abc::Example::t_Data ^' kann nicht in 'abc::Example::t_Data' konvertiert werden
    1>          Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    1>          Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    

    Langsam bin ich ein wenig ratlos...



  • Ahoi,

    da habe ich mich doch direkt mal hier im Forum registriert.
    Ich habe die Lösung gefunden und zwar muss es folgendermaßen aussehen:

    array<Type=abc::Example::t_Data>^ arData = gcnew array<Type=abc::Example::t_Data>(list.size());
    


  • Das geht aber auch einfacher:

    auto ar = gcnew array<DateTime>(12);
    

Anmelden zum Antworten