Ergebnis 1 bis 5 von 5

Thema: [C++] Klassenvariable an andere Klasse übergeben (2D Array)

  1. #1
    Shogun Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard [C++] Klassenvariable an andere Klasse übergeben (2D Array)

    Ich fange langsam echt an an C++ zu verzweifeln ...
    Also, folgendes, erstmal der Code.

    Code:
    	class gameClass
    	{
    		private:
    			calculateMoveClass calculateMove;
    
    		public:
    			gameClass();
    
    			short points[2][6]; // Points of each player
    	};
    
    	gameClass::gameClass()
     	{
    		this->calculateMove.init(this->points); 
    	}
    Also, zuerst wird in der Klasse gameClass eine Instanz der Klasse calculateMoveClass angelegt.
    Nun versuche verzweifelt über den Konstruktor einen Referenz oder einen Pointer (ist mir eigentlich egal, welches von beiden) an die Funktion init() der Klasse calculateMoveClass zu übergeben.

    Google spuckte nach einigem Suchen folgendes aus.
    Code:
    void test( int* t ) {
      t[0] = 1;
      t[1] = 2;
    }
    Ok, versuchen wir das mal.
    Code:
    	class calculateMoveClass
    	{
    		public:
    			void init(short *points);
    	};
    
    	void calculateMoveClass::init(short *points)
    	{
    
    	}
    /opt/progs/c++/messalla/src/game.h:48: Fehler: keine passende Funktion für Aufruf von »calculateMoveClass::init(short int [2][6])«
    /opt/progs/c++/messalla/src/calculateMove.h:27: Anmerkung: Kandidaten sind: void calculateMoveClass::init(short int*)
    Das sagt mir, dass der Funktionsaufruf nicht zur Funktion passt.
    Wie schaffe ich es nun, diesen Pointer (oder die Referenz) in der andere Funktion zu haben?

    Post Scriptum:
    Bitte nicht über evtl. chaotischen Code meckern, ist nunmal mein Stil =)
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Fortgeschrittene/r
    Registriert seit
    26.09.2005
    Ort
    Nürnberg
    Beiträge
    169
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Also, die Sache ist eigentlich ganz einfach, du hast wahrscheinlich nur bei den Pointern noch kleinere Defizite.

    Dein Problem ist, dass die Funktion calculateMoveClass::init einen Pointer auf den primitiven Typ "short" erwartet. Du übergibst aber der Funktion einen Pointer der wiederrum auf einen Pointer auf den primitiven Typ short zeigt.

    Hier mal der Hinweis:

    Code:
    short points[...][...];
    // ist nichts anderes als
    short* points[...];
    // oder
    short** points;
    /* mit _einem_Unterschied_
     * du holst dir mit den eckigen Klammern und einer Zahl darin
     * direkt Speicher, was du bei short** points nicht tust
     */
    Wenn du das verstanden hast, brauchst du nur die Methode so anpassen:

    Code:
    void calculateMoveClass::init(short** points)
    {
       // do something
    }
    Und schon sollte es funktionieren.
    Aber Vorsicht: wenn du die Größe der Matrize nicht übergibst, musst du aufpassen nicht über die Grenzen zu laufen. Auf gut deutsch, dass hier darfst du nicht:

    Code:
    void calculateMoveClass::init(short** points)
    {
       points[2][6] = ... // falsch
       points[1][5] = ... // richtig, "letztes" Element
       points[0][0] = ... // richtig, "erstes" Element
       // oder anders rum
       ... = points[1][3];
    }

  3. #3
    Shogun
    Themenstarter
    Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard

    Ja, du hast recht, ich bin mit der Pointersache noch nicht so richtig vertraut
    Ersteinmal vielen Dank, dass du dir die Zeit nimmst und versuchst mir zu helfen.
    Leider läuft das ganze so auch nicht

    /opt/progs/c++/messalla/src/game.h:48: Fehler: keine passende Funktion für Aufruf von »calculateMoveClass::init(short int [2][6])«
    /opt/progs/c++/messalla/src/calculateMove.h:53: Anmerkung: Kandidaten sind: void calculateMoveClass::init(short int**)
    Hast du noch eine andere Idee?

  4. #4
    Fortgeschrittene/r
    Registriert seit
    26.09.2005
    Ort
    Nürnberg
    Beiträge
    169
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ok, hab da ein bisschen Müll erzählt.

    Ich hab das gerade mal ausprobiert, und so wie es aussieht braucht der Compiler bei einer solchen statischen Matrix die Größe. Es reicht also nicht "short** variable" zu übergeben, sondern die Größe muss mit angegeben werden: "short variable[2][6]".
    Dann funktioniert das problemlos.

    Komischerweise funktioniert es bei einem normalen Array auch ohne die Größe:

    Code:
    void test(short* a_mat, int length)
    {
    	// mach was
    }
    
    int main(int argc, char* argv[])
    {
    	short muh[2];
    
    	muh[0] = 1;
    	muh[1] = 2;
    
    	test(muh, 2);
    
    	return 0;
    }
    Also ich weiß jetzt auch nicht genau warum der Compiler bei einer Matrix die Größe benötigt. Muss ich mich mal informieren...

  5. #5
    Shogun
    Themenstarter
    Avatar von DarkSyranus
    Registriert seit
    28.03.2006
    Ort
    ::1/128
    Alter
    25
    Beiträge
    3.446
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard

    Ok, thx, leider wird das dann ja nicht als Pointer übergeben, oder?
    Ich brauch das ganze aber als Pointer, das ist das Problem ...

    Edit:
    Juhu !!! Ich habs hinbekommen, läuft nun über eine Referenz und ein Typedef.
    Hier die Lösung für alle Interessierten.


    Code:
    typedef short tPoints[2][6];
    
    /* ... */
    public:
    	tPoints points; // Points of each player
    
    /* ... */
    void calculateMoveClass::init(tPoints &points)
    Trozdem Vielen, Vielen Dank für deine Hilfe.

Ähnliche Themen

  1. Problem mit Array füllen und an andere Funktion übergeben
    Von Jessica Heinze im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 10.06.2007, 12:22
  2. Array an overlib übergeben?
    Von JDF1976 im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 15.02.2007, 11:05
  3. Werte von einer php-Seite in eine andere übergeben
    Von php-Neuling im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 11.01.2006, 15:56
  4. Antworten: 0
    Letzter Beitrag: 04.11.2005, 10:44
  5. ! ! ! Benutzername und Kennwort an andere Website übergeben
    Von Christian im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 23.08.2005, 19:21

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •