template klasse verschachteln...



  • dgrat schrieb:

    danke caipi!

    1. das mit dem index war doof... das war compilefehler

    Ich sehe trotzdem nicht, dass du ihn behoben hast.

    dgrat schrieb:

    wo steht denn da nicht fest wie viel speicher benötigt wird? und warum funktioniert die member funktion im gegensatz zur diesr problemfunktion dArray()??

    sorry ich meinte, warum funktioniert die ausgabefunktion dispArray im gegensatz zur dArray funktion nicht? sind ja praktisch baugleich.

    Nicht ganz. dArray ist nämlich _keine_ Memberfunktion von dynVec, weshalb sie _nicht_ auf private Datenelemente von dynVec zugreifen kann.

    Schau dir am besten nochmal die Grundlagen, insbesondere Arrays, Das Prinzip der Kapselung, etc. an.

    Gruß Caipi



  • zum index: funktion hab ich noch nicht gepostet
    [cpp]template<class T>
    void dArray(dynArray<T> array)
    {
    std::cout<<"SIZE: "<<array.getSize()<<std::endl;
    std::cout<<"INDEX: "<<array.getIndex()<<std::endl;

    for(int i = 0; i < array.getIndex(); i++)
    std::cout<<i<<".) "<< array.getElement(i) <<std::endl;
    }[/cpp]

    dgrat schrieb:
    Zitat:
    wo steht denn da nicht fest wie viel speicher benötigt wird? und warum funktioniert die member funktion im gegensatz zur diesr problemfunktion dArray()??

    sorry ich meinte, warum funktioniert die ausgabefunktion dispArray im gegensatz zur dArray funktion nicht? sind ja praktisch baugleich.

    Nicht ganz. dArray ist nämlich _keine_ Memberfunktion von dynVec, weshalb sie _nicht_ auf private Datenelemente von dynVec zugreifen kann.

    Schau dir am besten nochmal die Grundlagen, insbesondere Arrays, Das Prinzip der Kapselung, etc. an.

    Gruß Caipi

    aber sie benutzt doch öffentliche funktionen der klasse?



  • ich sehe echt keinen grund dafür dass ich einen speicherzugriffsfehler bekomme weil ich auf private normale variablen zugreife. und zwar über normale funktionen...
    hier ein beispiel:

    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif
    
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    template<class T>
    class a
    {
    private: 
    	int b;
    public:
    	a(int c)
    	{
    		b = c;
    	}
    
    	int getB()
    	{
    		return b;
    	}
    };
    template<class T>
    void getnB(a<T> foo)
    {
    cout<<foo.getB();
    }
    
    int main(int argc, char *argv[])
    {
      a<int> foo(6);
      getnB(foo);
    
      return EXIT_SUCCESS;
    }
    

    vergleicht man das mit meins, stellt man fest das es keinen unterschied gibt...:

    template<class T>
    class dynArray
    {
    private:
    	T *mainArray;
    
    	int zeilen;
    	int index;
    	int dimArray;
    public:
    ...
    	int getIndex()
    	{
    		return index;
    	}
    	int getZeilen()
    	{
    		return zeilen;
    	}
    };
    template<class T>
    void dArray(dynArray<T> array)
    {
    	std::cout<<"SIZE: "<<array.getZeilen()<<std::endl;
    	std::cout<<"INDEX: "<<array.getIndex()<<std::endl;
    }
    

Anmelden zum Antworten