List<DateTime^>^ ----> compilerfehler C3225



  • Guten Tag,

    leider habe ich im Moment ein Problem, dass ich mir nicht erklären kann.

    Zur besseren Übersicht meines Programms und die bessere Handhabung meiner XML-Datein habe ich mir für jede der 3 Arten eine eigene Klasse geschrieben, die das Aufrufen, Ändern von Daten, Abspeichern und gegebenenfalls das Erstellen übernehmen. In einer dieser Klassen muss ich eine unbestimmte Anzahl an Argumenten abspeichern, die jeweils 7 Elemente besitzen. Zwei dieser Unterelemente sind Zeitangaben.

    Der Klasse werden 7 List<T> mit der gleichen Länge übergeben (oder eben von der Klasse zurück gegeben). Damit ich am Ende nicht lauter Strings umherschiebe nehme ich die Konvertierung von DateTime zu String und umgekehrt in der Klasse vor.

    Mein Problem ist jetzt, dass ich anscheinend keine Liste von DateTime erstellen kann.

    Hier der Code:
    XmlInterface.h:

    #pragma once
    public ref class XmlDatabase
    {
    public: 
    	XmlDatabase(System::String^ path);
    	~XmlDatabase();
    
    private:
    	System::String^ _path;
    
    	bool _wasEmpty;
    	System::Collections::Generic::List<System::String^>^ _TitleList;
    	System::Collections::Generic::List<System::String^>^ _DataPathList;
    	System::Collections::Generic::List<int>^ _PosAlphabeticallyList;
    	System::Collections::Generic::List<float>^ _PosAssessmentList;
    	System::Collections::Generic::List<float>^ _PosRatedList;
    	System::Collections::Generic::List<System::DateTime^>^ _PosReleaseList;
    	System::Collections::Generic::List<System::DateTime^>^ _PosAddedList;
    
    public:
    /*... property set /get ...*/
    };
    

    XmlInterface.cpp:
    [code="cli"]
    #include "XmlInterface.h"
    #include "stdafx.h"

    XmlDatabase::XmlDatabase(System::String^ path) : _path(path)
    {
    _TitleList = gcnew System::Collections::Generic::ListSystem::String^();
    _DataPathList = gcnew System::Collections::Generic::ListSystem::String^();
    _PosAlphabeticallyList = gcnew System::Collections::Generic::List<int>();
    _PosAssessmentList = gcnew System::Collections::Generic::List<float>();
    _PosRatedList = gcnew System::Collections::Generic::List<float>();
    _PosReleaseList = gcnew System::Collections::Generic::ListSystem::DateTime^();
    _PosAddedList = gcnew System::Collections::Generic::ListSystem::DateTime^();

    /*... etc. */
    }

    Compilerfehler:
    XmlInterface.h(30): error C3225: Das generische Typargument für "T" kann nicht "System::DateTime ^" sein, es muss ein Werttyp oder ein Handle für einen Referenztyp sein.
    XmlInterface.h(31): error C3225: Das generische Typargument für "T" kann nicht "System::DateTime ^" sein, es muss ein Werttyp oder ein Handle für einen Referenztyp sein.
    etc... (immer der selbe Fehler in allen Zeilen in denen ich eben die Liste benutze...

    Ich habe viele beispiele gesehen und auch in MSDN gelesen in denen eine Liste von DateTime erzeugt wurde. Allerdings waren das (wie immer bei den dürftigen CLI beispielen) eben C# oder VB beispiele. Heißt das, dass ich in CLI keine solche Liste erstellen kann?



  • Sry es scheint als hätte ich das CLI Code closing tag vergessen.

    Außerdem entsprechen die Zeilenangaben im compilerfehler Zeile 17 und 18 von XmlInterface.h



  • Ich schätze mal

    List<System::DateTime>^
    

    anstatt

    List<System::DateTime^>^
    

    wird es richten...



  • XmlInterface.h:

    #pragma once 
    public ref class XmlDatabase 
    { 
    public: 
        XmlDatabase(System::String^ path); 
        ~XmlDatabase(); 
    
    private: 
        System::String^ _path; 
    
        bool _wasEmpty; 
        System::Collections::Generic::List<System::String^>^ _TitleList; 
        System::Collections::Generic::List<System::String^>^ _DataPathList; 
        System::Collections::Generic::List<int>^ _PosAlphabeticallyList; 
        System::Collections::Generic::List<float>^ _PosAssessmentList; 
        System::Collections::Generic::List<float>^ _PosRatedList; 
        System::Collections::Generic::List<System::DateTime^>^ _PosReleaseList; 
        System::Collections::Generic::List<System::DateTime^>^ _PosAddedList; 
    
    public: 
    /*... property set /get ...*/ 
    };
    

    Zeile 17 und 18!!!

    XmlInterface.cpp:

    #include "XmlInterface.h" 
    #include "stdafx.h" 
    
    XmlDatabase::XmlDatabase(System::String^ path) : _path(path) 
    { 
    _TitleList = gcnew System::Collections::Generic::List<System::String^>(); 
    _DataPathList = gcnew System::Collections::Generic::List<System::String^>(); 
    _PosAlphabeticallyList = gcnew System::Collections::Generic::List<int>(); 
    _PosAssessmentList = gcnew System::Collections::Generic::List<float>(); 
    _PosRatedList = gcnew System::Collections::Generic::List<float>(); 
    _PosReleaseList = gcnew System::Collections::Generic::List<System::DateTime^>(); 
    _PosAddedList = gcnew System::Collections::Generic::List<System::DateTime^>(); 
    
    /*... etc. */ 
    }
    

    Zeile 11 und 12!!!!

    Bitte lies doch mal den Code von meinem Beitrag.



  • Edit:
    Ok sry wegen dem letzten Beitrag... ich hab es genau andersherum verstanden.
    Aber ich verstehe die Lösung nicht. DateTime ist doch ein Managed Object und es müsste d.h. List<DateTime> heißen. (Wie bei List<String>)

    In einer anderen Klasse hab ich auch DateTime^ var; benutzt. Kann ich nur die nicht Menaged Variante von DateTime in einer Liste benutzen?



  • System::DateTime ist genauso wie int (System::Int32) und float (System::Single) ein Wertetyp (Struktur), während aber System::String ein Referenztyp (Klasse) ist, so daß du dann eine "managed reference" benötigst.



  • Ok verstanden ^^ erscheint mir Logisch, aber wieso verwende ich DateTime dann außerhalb von einer Liste dann so: ???

    DateTime^ timeval;
    

Anmelden zum Antworten