operator== überladen/Zeiger in Struktur einer Klasse



  • Hallo zusammen!

    Ich lasse erstmal den Code sprechen. 😉

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream.h>
    
    class Spielfeld
    {
    private:
    	struct Felder{
    		int wert;
    		Felder *next;
    		Felder *back;
    	};
    
    	struct Kreisfelder{
    		Felder feld[8];
    	}kreis[3];
    
    public:
    	Spielfeld();
    	vergleich(int kpos, int fpos);	//dummy zum Veranschaulichen
    
    	friend bool operator== (const int&, const Spielfeld& );
    };
    
    bool operator== (const int& zahl, const Spielfeld& imfeld)
    {
    	return (zahl == imfeld.Felder.wert);	
    }
    
    Spielfeld::vergleich(int kpos, int fpos)
    {
    	if(kreis[kpos].feld[fpos].wert == kreis[kpos].feld[fpos].next &&
    		kreis[kpos].feld[fpos].wert == kreis[kpos].feld[fpos].next->next)
    	{
    		cout << "*freu*" <<endl;
    	}
    }
    

    Ich weiss nicht wie die Parameter beim Überladen heissen müssen. Und ich weiss nicht ganau wie der Vergleich auszusehen hat...

    Der Konstruktor:

    Spielfeld::Spielfeld()
    {
    	int i, j;
    
    	for(j=0;j<3;j++) 
    	{
    		for(i=0; i<8; i++) 
    		{
    			kreis[j].feld[i].wert=0;
    		}
    	}
    
    	for(j=0;j<3;j++)
    	{
    		for(i=0; i<7;i++) 
    		{
    			kreis[j].feld[i].next = &kreis[j].feld[i+1];
    		}
    		kreis[j].feld[7].next = &kreis[j].feld[0];
    	}
    
    	for(j=0;j<3;j++)
    	{
    		kreis[j].feld[0].back = &kreis[j].feld[7];
    		for(i=1; i<8;i++) 
    		{
    			kreis[j].feld[i].back = &kreis[j].feld[i-1];
    		}
    	}
    }
    

    Die main könnte so aussehen:

    void main (void)
    {
    	Spielfeld spiel;
    	spiel.vergleich(1,1);
    }
    

    Wo liegt mein Fehler? 😕 Kann ich es irgendwie anderes lösen?
    THX



  • Mir ist ehrlich gesagt nicht ganz klar, was du erreichen willst. 😕

    Spielfeld::vergleich(int kpos, int fpos) 
    { 
        if(kreis[kpos].feld[fpos].wert == kreis[kpos].feld[fpos].next && 
            kreis[kpos].feld[fpos].wert == kreis[kpos].feld[fpos].next->next) 
        { 
            cout << "*freu*" <<endl; 
        } 
    }
    

    Hier vergleichst du doch einen int (den "wert") mit einem Felder* (dem "next"). Wie soll das gehen?

    bool operator== (const int& zahl, const Spielfeld& imfeld) 
    { 
        return (zahl == imfeld.Felder.wert);     
    }
    

    Hier greifst du auf das Element "wert" des Elements "Felder" des Objekts "imfeld" zu. Felder ist aber kein Objekt. Daher führt dieser Code auch zu einem Fehler.

    Erklär bitte nochmal ganz genau, was du machen willst. Und poste die ersten paar Fehlermeldungen.

    btw:
    Die Header mit .h am Ende gibt es nicht mehr. Die Standard-Header haben keine Endung.
    Ebenso falsch ist void main(). Es heißt int main(). Bitte ändere das.



  • Danke für deine Bemühungen, es hat sich mittlerweile geklärt. Ich brauch den Operator garnicht zu überladen... 🙄

    Ich muss in meiner if einfach ...].next->wert machen und schon funzt es.

    THX


Anmelden zum Antworten