kostenloser Webspace werbefrei: lima-city


template Klasse ist angeblich non-class type

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    xilebo

    xilebo hat kostenlosen Webspace.

    Und wieder stehe ich vor einem Problem, das ich nicht verstehe:
    Beim Versuch ein selbstgestricktes Array zu testen bekommen ich folgende Fehlermeldung:

    arraytest.cpp: In function ‘int main()’:
    arraytest.cpp:20: error: request for member ‘size’ in ‘vIntArray’, which is of non-class type ‘MyArray<double>()’


    Die main:
    #include <stdlib.h>
    #include <iostream>
    #include "MyArray.h"
    
    int main() {
        MyArray<double> vIntArray();
        std::cout << vIntArray.size();
        return (EXIT_SUCCESS);
    }


    MyArray.h:
    #ifndef _MYARRAY_H
    #define	_MYARRAY_H
    
    #include "MyArrayElement.h"
    #include <iostream>
    
    
    template<typename tType> class MyArray {
    private:
        MyArrayElement<tType>* mpcAnchor; //Der Anker verweist auf das erste Element des Arrays
        MyArrayElement<tType>* mpcLast; //Ein Zeiger auf das letzte Element des Arrays
        unsigned int miSize;
    public:
    
        MyArray(); //Initiiert das Array mit Länge 0
        MyArray(MyArrayElement<tType>* pcAnchor); //Initiiert das Array mit einem ersten Element
    
        MyArray(MyArray<tType> const& cOriginal); //Der Kopierkonstruktor stellt sicher, dass der Inhalt mit kopiert wird
    
        ~MyArray(); //Der Destruktor stellt sicher, dass am Ende alle Elemente gelöscht werden.
    
        MyArray<tType>& operator=(MyArray<tType> const& cOriginal);
        tType& operator[](unsigned int const& iIndex); //gibt das Element mit dem Entsprechenden Index zurück (Indizierung beginnt mit 0)
    
        unsigned int size(); //bestimmt die Anzahl der Elemente im Array
    
        void add(tType const& vElement); //fügt ein Element am Ende des Arrays hinzu
        void del(unsigned int const& iIndex); //löscht das Element mit dem übergebenen Index; alle nachfolgenden Elemente rücken auf.
        void resize(unsigned int iNewSize); //Ändert die Größe des Arrays; Wird das Array dabei verkleinert werden entsprechend viele Elemente vom Ende gelöscht; wird das Array vergrößert werden am Ende entsprechend viele neue Elemente angehängt und mit 0 initiiert.
    
    };
    
    template<typename tType>
    std::ostream& operator<<(std::ostream& vStream, MyArray<tType> const& vArray); //für die Ausgabe
    
    #endif	/* _MYARRAY_H */


    Definition des verwendeten Konstruktors:
    template<typename tType>
    MyArray<tType>::MyArray() : miSize(0) {
    };


    Definition von size()
    template<typename tType>
    unsigned int MyArray<tType>::size() {
        return miSize;
    };


    Wahrscheinlich bin ich einfach nur zu doof, aber ich finde nichts, warum meine Klasse auf einmal keine mehr sein soll...
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Versuch mal die Klammern beim Konstruktor von vIntArray in main.cpp rauszunehmen, also:

    int main() {
        MyArray<double> vIntArray;
    ....
  4. Autor dieses Themas

    xilebo

    xilebo hat kostenlosen Webspace.

    Ja, das hat geholfen, danke.
    Auch wenn ich nicht verstehe warum...
  5. Eine mögliche Erklärung (bin mir aber nicht 100% sicher) wäre die Folgende:

    Wenn man in C++ ein Object auf dem Stack erzeugt, d.h. als lokale Variable und ohne 'new' und der Konstruktor keine Argumente entgegennimmt, dann dürfen keine Klammern angegeben werden.
    Der Ausdruck
    MyArray<double> vIntArray();

    enthält aber leere Klammern, was dem Kompiler normalerweise sagt, dass es eine Funktionsdeklaration ist.
    Also der Kompiler meint, dass Du eine Funktion mit Namen 'vIntArray' deklarierst, die keine Argumente entgegennimmt und eine Instanz der Klasse 'MyArray<double>' zurückgibt.
    Und da eine Funktion keine Klasse ist und folglich auch keine weiteren Methoden beinhalten kann, kommt der Fehler.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!