template Parameter mit Elementenanzahl



  • Hallo,
    ich möchte einer Template Funktion ein Array und die dazugehörige Elementenanzahl übergeben, wie muß ich da vorgehen?

    #include <iostream.h>
    
    class einfach{
    	public:
    		int ticketid;
    		bool use;
    };
    
    class zweifach{
    	public:
    		int ticketid;
    		bool use;
    };
    
    template<class typ>
    void test(typename typ){  // Hier muss noch die Elementanzahl eingefügt werden
    	cout << sizeof(typ); // Hier soll er mit nur zum Test die Elementenanzahl anzeigen, müsste einmal 100 und einmal 50 sein
    }
    
    int main(){
    	einfach t1[100];
    	zweifach t2[50];
    
    	test(t1);  // Hier soll noch übergeben werde, das es 100 Elemente sind
    	cout << endl;
    	test(t2);  // Hier soll noch übergeben werde, das es 50 Elemente sind
    	cout << endl;
    	return 0;
    }
    

    Der template Variable typ, soll noch die Elementenanzahl übergeben werden. Wie muß ich vorgehen?


  • Mod

    Ein iostream.h gibt es nicht im Standard.

    #include <cstddef>
    #include <iostream>
    template<typename T, std::size_t N>
    void test(T(&)[N]){
        std::cout << N;
    }
    


  • Danker für die schnelle Antwort,

    leider bekomm ich unter anderen folgende Fehlermeldung: "Verweis auf ein Feld der Groesse Null ist ungueltig"

    wie muss ich die Funktion aufrufen?



  • Kompiler?
    Genauer Code? (So übernommen oder verändert?)



  • also ich hab noch das using namespace std;
    eingesetzt, ansonsten 1 zu 1 übernommen ....

    #include <cstddef>
    #include <iostream>
    
    using namespace std;
    
    class einfach{
    	public:
    		int ticketid;
    		bool use;
    };
    
    class zweifach{
    	public:
    		int ticketid;
    		bool use;
    };
    
    template<typename T, std::size_t N>
    void test(T(&)[N]){
        std::cout << N;
    }
    
    int main(){
    	einfach t1[100];
    	zweifach t2[50];
    
    	test(t1);
    	cout << endl;
    	test(t2);
    	cout << endl;
    	return 0;
    }
    

    --------------------Konfiguration: test - Win32 Debug--------------------
    Kompilierung läuft...
    main.cpp
    c:\cpp\test\main.cpp(19) : error C2039: 'size_t' : Ist kein Element von 'std'
    c:\cpp\test\main.cpp(20) : error C2265: '<unbekannt>' : Verweis auf ein Feld der Groesse Null ist ungueltig
    c:\cpp\test\main.cpp(20) : error C2266: '<unbekannt>' : Verweis auf ein nicht durch Konstanten begrenztes Feld ist ungueltig
    c:\cpp\test\main.cpp(29) : error C2784: 'void __cdecl test(T (&)[1])' : Vorlagenargument fuer ' (&)[1]' von 'class einfach [100]' konnte nicht hergeleitet werden
    c:\cpp\test\main.cpp(31) : error C2784: 'void __cdecl test(T (&)[1])' : Vorlagenargument fuer ' (&)[1]' von 'class zweifach [50]' konnte nicht hergeleitet werden
    Fehler beim Ausführen von cl.exe.

    test.exe - 5 Fehler, 0 Warnung(en)



  • Was für einen Compiler hast du denn?
    Du könntest mal das std:: for dem size_t weglassen oder statt size_t unsigned int nehmen.



  • der erste fehler sagt doch alles. dein compiler ist nicht standardkonform(std::size_t ist natürlich member von std).

    mal davon ab. wenn du using namespace std benutzt, brauchst du kein "std::" mehr.



  • also ich verwende Microsoft Visual C++ als Entwicklungsumgebung.

    Habe auch den Versuch mit dem unsigned int versucht, aber leider hat auch das nicht so geklappt, wie es sollte 😞



  • also ich verwende Microsoft Visual C++ als Entwicklungsumgebung.
    υ
    Habe auch den Versuch mit dem unsigned int versucht, aber leider hat auch das nicht so geklappt, wie es sollte 😞



  • Welches VC++? Etwas Nummer 6?
    Dann beschaff dir bitte den aktuellen VC++2008.



  • Und welche Version von Visual C++?
    Es sollte schon mindestens das Visual Studio 2005 sein...

    Die älteren hatten u.a. noch Probleme mit den Templates.



  • ja ist Visual C++ 6.
    Naja aber nichts desto trotz, geht mein Vorhaben mit der 6er Version oder kann ich das vergessen?



  • Du solltest wirklich auf die aktuelle Version umsteigen. Der VC6 ist vom Standard doch recht weit entfernt.



  • Das mit dem Umstieg auf eine neuere Version liegt nicht bei mir, ich selber bin noch Schüler und habe absolut keinen Einfluss auf die Anschaffungen, die das Schulamt tätigt. Wir haben nun mal nur die 6er Version zur Verfügung und müssen damit auch arbeiten.
    Aus diesem Grund war ja dann auch meine Frage, ob es mit der 6er Version doch eine Möglichkeit gibt, das Problem irgendwie zu lösen.



  • userXY schrieb:

    Das mit dem Umstieg auf eine neuere Version liegt nicht bei mir, ich selber bin noch Schüler und habe absolut keinen Einfluss auf die Anschaffungen, die das Schulamt tätigt.

    Das mag sein, wobei man manchmal den Schulen verklickern sollte das es für Schulen eine Aktion gibt die soviel ich weiß die aktuellen Entwicklerprodukte kostenlos anbietet. Zudem gibt es ohnehin kostenlose Expressversionen die für Schulen IMHO völlig ausreichend sind.

    userXY schrieb:

    Wir haben nun mal nur die 6er Version zur Verfügung und müssen damit auch arbeiten. Aus diesem Grund war ja dann auch meine Frage, ob es mit der 6er Version doch eine Möglichkeit gibt, das Problem irgendwie zu lösen.

    Die VC6 Version ist weder besonders "Templatefreundlich" noch unterstützt sie die STL wirklich befriedigend. Es ist schwer mit VC6 noch Programme zu schreiben die man Standardkonform nennen kann.

    cu André



  • userXY schrieb:

    [...] und habe absolut keinen Einfluss auf die Anschaffungen, die das Schulamt tätigt.

    Falsch. Die Lehrmittel, die von der Schule gekauft werden, sind schließlich für euch Schüler gedacht. Würdert ihr als Informatikkurs z.B. geschlossen gegen die völlig veralteten und überholten Lehrmittel protestieren, könnte das die Schule durchaus dazu bewegen, doch mal neuer Software zu spendieren. Ohne Protest sieht sie allerdings wahrscheinlich keinen Handlungsbedarf...



  • Ja sicher wenn wir richtig Stress machen würden .. wäre vielleicht in einem Jahr neue Software da, aber das löst mein Problem jetzt absolut nicht ... das die 6er Version absolut veraltet ist, ist mir auch klar. Das es auch Freewarelösungen gibt, ist mir ebenfalls klar, aber Aufgabenstellung steht und Abgabe soll Freitag sein ... und da kann ich einen Aufstand proben soviel ich will ... bis dahin ist keine neue Software da!

    Ich möchte doch von euch nur einen Aussage wie "ja es gibt eine Lösung" oder "nein mit der 6er Version ist es definitiv nicht möglich" ... denn wenn es nicht geht dann geht es nicht, dann muß ich es über Überlagerte Funktionen machen ....



  • userXY schrieb:

    Ich möchte doch von euch nur einen Aussage wie "ja es gibt eine Lösung" oder "nein mit der 6er Version ist es definitiv nicht möglich" ... denn wenn es nicht geht dann geht es nicht, dann muß ich es über Überlagerte Funktionen machen ....

    Steht den dort auch, WELCHEN Compiler du benutzen sollst?
    Wenn nein, würde ich mir die 30 Minuten nehmen und einen aktuellen Downloaden und installieren..
    http://www.microsoft.com/germany/express/product/visualcplusplusexpress.aspx

    Zum Beispiel..



  • Ja das ist es ja warum ich hier so krampfhaft versuchte eine Lösung für die 6er Version suche ... wir müssen in der 6er Version Programmieren. Privat programmiere ich mit dem Dev C++ Compiler ...


Log in to reply