Markus Pitha: (C) Zeigerproblem

Hi,
ich habe ein kleines Problem. Ich komme irgendwie nie damit klar, wenn ich ein etwas komplizierteres Konstrukt an eine Funktion übergeben will, mit dieser Funktion aber das zu übergebene Objekt ändern will.
Mal eine kurze Erklärung:
Ich benutze die Bibliothek SDL, welche einen Typ beinhaltet, der SDL_Rect heißt (http://sdldoc.csn.ul.ie/sdlrect.php)
Diesem Typ kann ich Werte zuweisen zB:

ship_rect.x = 400;
ship_rect.y = 570;
ship_rect.w = ship->w;
ship_rect.h = ship->h;

Da ich aber in nächster Zeit sehr viele Zuweisungen dieser Art haben werden, wollte ich diese Zuweisungen in eine Funktion packen:

Mein Prototyp würde so aussehen:
void set_startposition(SDL_Rect *object_rect, int x, int y, int width, int height);

Die Funktion beinhaltet dann so etwas (wurde auch ohne * probiert):
*object_rect.x = x;
*object_rect.y = y;
*object_rect.w = width;
*object_rect.h = height;

Übergeben würde ich die (obere) Datei so:
set_startposition(&ship_rect, 400, 570, ship->w, ship->h);

Das Problem ist nun, dass GCC (3.3.5) mit den folgenden Fehlermeldungen anfängt zu meckern:

error: request a member 'x' in something not a structure or union
error: request a member 'y' in something not a structure or union
usw.

Wie kann ich die Werte in "ship_rect" aus der Funktion heraus nun ändern? Darum geht es mir.

Markus.

--
sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
  1. 你好 Markus,

    Die Funktion beinhaltet dann so etwas (wurde auch ohne * probiert):
    *object_rect.x = x;
    *object_rect.y = y;
    *object_rect.w = width;
    *object_rect.h = height;

    Da bist du auf die Assoziativität reingefallen :) . hat eine größere
    Assoziativität als *, so dass erst der .-Operator versucht wird aufzulösen
    und danach erst das *. Das geht natürlich nicht.

    Um aber auf Elemente einer Struktur, die man per Zeiger referenziert hat,
    einfach zuzugreifen, gibt es den ->-Operator:

      
    object_rect->x = x;  
    object_rect->y = y;  
    object_rect->w = width;  
    object_rect->h = height;  
    
    

    Der macht im Grunde nichts anderes als das hier:

      
    (*object_rect).x = x;  
    (*object_rect).y = y;  
    (*object_rect).w = width;  
    (*object_rect).h = height;  
    
    

    再见,
    克里斯蒂安

    --
    Die Stärke des Geistes ist unendlich, die Muskelkraft dagegen ist begrenzt.
    http://wwwtech.de/
    1. Hallo,

      Da bist du auf die Assoziativität reingefallen :) .

      Pfff. Darauf wäre ich sicher nicht gekommen. Jetzt ist alles klar, danke.

      Übrigens, deine chinesiche Schrift funktioniert bei mir nicht mehr, aber die selben Symbole sehe ich auch bei Google, falls dort chinesische Zeichen sind.
      Es sind seltsame kleine Rechecke die 4 Zeichen (offensichtlich hexadezimal kodiert) beinhalten, die ich statt den chinesichen Zeichen sehe.
      Ich habe das schon eine ganze Weile, weiß aber gar nicht, was dazu geführt haben soll. Irgendeine Idee?
      Ich benutze Moz. 1.7.6, Linuxkernel 2.6.11.6.

      Markus.

      --
      sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
      1. 你好 Markus,

        Übrigens, deine chinesiche Schrift funktioniert bei mir nicht mehr, aber
        die selben Symbole sehe ich auch bei Google, falls dort chinesische
        Zeichen sind.

        Bist du sicher, dass du sie nicht verwechselst mit z. B. japanischen? ;-)

        Es sind seltsame kleine Rechecke die 4 Zeichen (offensichtlich hexadezimal
        kodiert) beinhalten, die ich statt den chinesichen Zeichen sehe.

        Ja, das macht der Mozilla bzw. Gecko, wenn er keine passenden Schriften hat.

        Ich habe das schon eine ganze Weile, weiß aber gar nicht, was dazu geführt
        haben soll. Irgendeine Idee?

        Schriften installieren :) kA, was du für eine Distro benutzt, aber wenn du
        die Arphic-Fonts, die HKSCS-Ming-Fonts und alles, was nach Unicode-Fonts
        oder INTL-Fonts riecht installierst, bist du auf der sicheren Seite ;-)

        再见,
        克里斯蒂安

        --
        Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
        http://wwwtech.de/
        1. So, hat schon wieder funktioniert.
          Wenn alle meine Probleme so schnell gelöst wären... =)

          Markus.

          --
          sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
        2. Hallo Christian,

          [...] kA, was du für eine Distro benutzt, [...]

          Du lässt Dir offensichtlich entweder Signaturen oder Bilder nicht anzeigen :-)
          Markus nutzt Gentoo, sofern das Bild in seiner Signatur der Wahrheit entspricht.

          Freundliche Grüße

          Vinzenz

          1. 你好 Vinzenz,

            [...] kA, was du für eine Distro benutzt, [...]

            Du lässt Dir offensichtlich entweder Signaturen oder Bilder nicht
            anzeigen :-)

            Weder, noch :)

            Markus nutzt Gentoo, sofern das Bild in seiner Signatur der Wahrheit
            entspricht.

            In dem Fall sind es diese Pakete:

            ckruse@skuld cforum $ ls /var/db/pkg/media-fonts/
            acroread-asianfonts-5.0.20020815  gnu-gs-fonts-std-8.11          intlfonts-1.2.1  unfonts-extra-1.0.1
            arphicfonts-0.1-r2                hkscs-ming-1.0_pre20030919-r1  unfonts-1.0      unifont-1.0-r2
            ckruse@skuld cforum $

            再见,
            克里斯蒂安

            --
            Wenn du gehst, gehe. Wenn du sitzt, sitze. Und vor allem: schwanke nicht!
            http://wwwtech.de/
        3. Übrigens: Wie schaffst du es eigentlich diese Zeichen hier hin zu schreiben?

          Markus.

          --
          sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
          1. 你好 Markus,

            Übrigens: Wie schaffst du es eigentlich diese Zeichen hier hin zu schreiben?

            Ich benutze Scim. Man drückt STRG+Space, um die alternative Eingabemethode zu
            aktivieren, gibt dann Pinyin (eine Art Lautschrift) ein und wählt dann das
            richtige Zeichen. Wie das aussieht, kannst du auf dem verlinkten Screenshot
            erkennen:

            http://www.defunced.de/pics/screenshots/2004-11-30-201446_2560x1024_scrot.png

            再见,
            克里斯蒂安

            --
            Der Mund ist das Portal zum Unglück.
            http://wwwtech.de/
            1. Moin,
              ich wollte mir zu Testzwecken das Programm mal ansehen, aber werde irgendwie nicht so ganz schlau daraus. Ich habe zwar ein Trayicon, wo ich verschiedene Sprachen auswählen kann wenn ich darauf klicke, bekomme aber nur einen schmalen Balken präsentiert, wo ich einige wenige Dinge auswählen kann. Das sind Sachen wie "Sick/unstick the input video and the toolbar" oder "Status of the current input method". Dass ich aber so eine Prompt sehe, wie du auf deinem Screenshot hast, schaffe ich aber irgendwie nicht?

              Markus.

              --
              sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
              1. 你好 Markus,

                hier gibt es eine ganz brauchbare Anleitung dazu:

                http://www.xuexizhongwen.de/index.htm?computing_t20.htm&1

                再见,
                克里斯蒂安

                --
                Fortune:
                http://wwwtech.de/
            2. Hallo.
              Nur der Vollständigkeit halber: In Mac OS X wurde diese Technik bereits integriert und steht in jeder daran angepassten Anwendung zur Verfügung.
              MfG, at

        4. yo,

          Schriften installieren :) kA, was du für eine Distro benutzt, aber wenn du
          die Arphic-Fonts, die HKSCS-Ming-Fonts und alles, was nach Unicode-Fonts
          oder INTL-Fonts riecht installierst, bist du auf der sicheren Seite ;-)

          auf der eine seite will das forum selfhtml lauf den faq's, dass man mit einer begrüßung startet und sich auch wieder verabschiedet, weil man letztlich mit menschen zu tun hat. das steht aber ein wenig im widerspruch zu dem, dass man genau dafür zeichensätze benutzt, die eine nicht all zu kleine zahl an rechnerkonfigurationen nicht richtig interpretieren kann. und dann zu fodern, alle die das nicht können, sollten doch einen font herunterladen, der genau das dann kann, finde ich ehrlich geagt den falschen weg. auch pseudo-überschriften wie variablen-namen und anderen dingen trifft den nagel nicht wirklich af dem kopf. sicherlich kann das jeder so halten wie ein dachdecker. aber meine persönliche meine dazu ist, das das sehr widersprüchlich ist.

          Ilja