Frage zu Strukturen und Klassen



  • Also ich habe die folgende Struktur

    struct Node{
    int size;	//Größe eines Blattes
    Node *less;	//Untere Elemente
    Node *gt[n];	//Oberes Element
    T *val;		//Wert des Blattes
    Node *parent;	//Elternelement
    Node *root;
    }
    

    Ich möchte sie in einer Klasse

    template <class T>
    class btree
    {
    public:
    
    private:
    }
    

    Einbringen aber irgendwie gelingt es mir aus mehren Gründen nicht?
    Ich hab mal gesehen das es irgendwie per initalisierungsliste in der struktur geht, aber so recht will es mir nicht gelingen.

    Vielleicht denke ich auch einfach nur falsch.

    Ziel ist es eine Klasse zu implementieren, die folgende Funktion beinhalten kann und gerade diese aufrufe mit Node durchführen kann.

    void btree::insert(int a)
    {
    	//1) Blatt suchen
    	Node=root;
    	while(Node->less)
    	{
    		for(i=Node->size-1;i>=0;i--)
    		{
    			if(Node->val[i]<a)
    			{
    				break;
    			}
    		}
    
    		if (i=-1)
    		{
    			Node=Node->less;
    		}
    		else
    		{
    			Node=Node->gt[i];
    		}
    
    	}
    
    	//2) Element einfügen
    
    	pa=0;
    	do{
    		for(i=Node->size-1;i>=0;i--)
    			if(Node->val[i]>0)
    			{
    				Node->val[it1]=Node->val[i];
    				Node->gt[i+1]=Node->gt[i];
    			}
    			else
    			{
    				Node->val[i]=a;
    				Node->gt[i]=pa;
    				Node->size++;
    				break;
    			}
    	//3)Splitten
    			if(Node->size==n)
    			{
    				pa==new Node();
    
    				for(i=0;i<n/2;i++)
    				{
    					pa->val[i]=Node->val[i+n/2+1];
    					pa->gt[i]=Node->gt[i+n/2+1];
    				}
    
    				pa->size=Node->size=n/2;
    				pa->less=Node->size=n/2;
    				a=Node->val[n/2];
    
    				if(Node->parent==0;)
    				{
    					Node->parent=new Node()
    				}
    				Node->parent->less=Node;
    				root=node->parent;
    				pa->parent=Node->parent;
    				Node=Node->parent;
    			else
    			{
    				break;
    			}
    	}while(true);
    }
    


  • schreibe bitte mal was du versucht hast. so ist das ein bisschen schwierig, da meine glasskugel leider gerade zur reparatur ist.



  • Mir wurde eben die insert funktion vorgegeben, nur benötige ich erst einmal einen Weg wie ich diese Variablen in der Klasse deklarieren kann.

    template <class T>
    class btree  
    {
    public:
    	btree();
    	virtual ~btree();
    	insert(int);
    
    private:
            int n;
    
    	struct Node{
            int size;		//Größe eines Blattes
            Node *less;		//Untere Elemente
    	Node *gt[n];	//Oberes Element
            T *val;		//Wert des Blattes
            Node *parent;	//Elternelement
    	Node *root;
    	}
    
    };
    


  • Du benutzt Node ständig als wäre es eine Variable. Es ist aber ein Typ. "root" wäre vermutlich so eine Variable (vom Typ "Node").

    BTW: Mit ein paar Hinweisen,
    a) welcher Fehler auftritt
    b) wo er auftritt

    bekommst Du sicher schneller Hilfe. Die meisten hier haben keine Lust, sich vollständig durch fremden Code zu beißen, sehen aber oft auf den ersten Blick, was falsch ist, wenn diese Infos bekannt sind.



  • erstmal C/C++ tags benutzen

    struct Node {
        int size;        //Größe eines Blattes
        Node *less;        //Untere Elemente
        Node *gt[n];    //Oberes Element
        T *val;        //Wert des Blattes
        Node *parent;    //Elternelement
        Node *root;
    };
    
    template <class T>
    class btree  
    {
    public:
        btree();
        virtual ~btree();
        insert(int);
    
    private:
            int n;
            Node knoten;     // so bindet man das struct ein
    };
    

    entweder so oder so bindet man structs in klassen ein:

    class test
    {
    public:
        struct lol 
        {
            int a;
        } lol;
    };
    

Log in to reply