Einfaches "Stehaufdemschlach"-Zeigerproblem



  • Hallo zusammen,

    habe da ein Anfänger Zeiger Problem. Und zwar habe ich folgende Funktion:

    BOOL susb_getNextCommand( struct sCoLaCommandQueue* cQueue, struct sCoLaCommand CoLaCommand )
    {
        CoLaCommand = cQueue->commands[1];
        return TRUE; 
    }
    

    Die beiden Typen oben habe ich so definiert:

    struct sCoLaCommand
    { 
        BYTE command[COLA_MAX_PACKET_SIZE];  
        BOOL EOC;                               // EndOfCommand
        unsigned int position;
        unsigned int size;
    };
    
    struct sCoLaCommandQueue
    {
        struct sCoLaCommand commands[USB_BUFFERED_COLA_COMMANDS];
        unsigned int current;
        unsigned int usedCommands;
    };
    

    und aufgerufen wird die funktion so:

    struct sCoLaCommand inputCoLaCommand;
    struct sCoLaCommandQueue inputCoLaCommandQueue;
    ...
    susb_getNextCommand ( &inputCoLaCommandQueue, inputCoLaCommand );
    

    eigentlich will ich nur, dass das command, der inputCoLaCommandQueue in inputCoLaCommand reinkopiert wird. aber leider macht er das nicht. Funktionsintern macht er genau dass was ich will, aber extern nicht. wo hab ich schon wieder meinen denkfehler?

    grüße markus



  • versuche mal das:

    susb_getNextCommand( struct sCoLaCommandQueue* cQueue, struct sCoLaCommand& CoLaCommand )
    

    Dann wird kein Wert mehr übergeben, sondern eine Referenz (bezieht sich also auf den Wert, den du der Funktion übergibst)



  • ich weiß jetzt nciht ob du das nur weggelassen hast sonst wäre ein operator=() nicht schlecht, ansonsten, was passiert denn statt dessen?



  • @salomon: soll das eine funktionsdefinition sein oder meinste ich soll das ganze so aufrufen

    susb_getNextCommand ( &inputCoLaCommandQueue, &inputCoLaCommand );
    

    Falls es eine neue Definition ist:

    BOOL susb_getNextCommand( struct sCoLaCommandQueue* cQueue, struct sCoLaCommand& CoLaCommand )
    

    dann bekomme ich folgenden Fehler:

    parse error before '&' token
    

    @balmung: deine aussgae versteh ich leider nicht 😞



  • Ne das muss schon die Funktionsdefinition sein.
    Ein "&" kennzeichnet, dass es sich bei dem übergebenen Wert um eine Referenz handelt. Aber ich kann den Error, den dein Compiler da ausspuckt, nicht nachvollziehen. Versuch mal das "struct" vor dem Typ wegzulassen.



  • @salomon: habe das struct weggelassen, aber immer noch die gleiche fehlermeldung erhalten. was ist denn der unterschied zw. dem & vor dem struct und dem * ? hatte eigentlich gedacht, dass der stern das so macht.



  • Also:
    Bei einem "*" handelt es sich um einen Zeiger, d.h du musst den -> operator für das Objekt verwenden. Bei einem "&" handelt es sich um eine Referenz, du musst aber bei Objekten den . operator verwenden.
    Eine Referenz ist nur ein Name, der sich auf das Objekt bezieht, d.h. änderst du etwas an der Referenz, änderst du auch das Objekt, auf das sich die Referenz bezieht. (Ich denke, dass ist, was du willst, oder?)
    Bei einem Zeiger ist das ebenfalls so, nur, dass der Zeiger die Adresse des Objekts speichert.



  • @_markus_:
    Aber das ist schon ein C++ Programm oder (und nicht etwa ANSI-C)?



  • ups, das ist mir jetzt aber peinlich, eigentlich war ich mir sicher im ansi C forum gepostet zu haben *rotwerd*

    natürlich ist es ansi c *duck*



  • kann mir jemand den post verschieben oder soll ich im ansi c teil nochmal posten?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.




Anmelden zum Antworten