anfängerfrage: struct an funktion in einer anderen datei übergeben



  • hi!

    habe 2 dateien:

    test1.c

    struct test
       {
       int id;
       } teststruct;
    
    void testFunc(struct test *testptr);
    
    int main (void)
       {
       testFunc(&teststruct);
    
       return 0;
       }
    

    test2.c

    void testFunc(struct test *testptr)
       {
       testptr->id=5;
       printf("%d\n", testptr->id);
       }
    

    Ich möchte die struct test an die funktion testFunc übergeben - klappt aber nicht...

    fehlermeldungen:
    warning: struct mail declared inside parameter list
    warning: its scope is only this definition or declaration, which is probably not what you want
    In function testFunc:
    error: dereferencing pointer to incomplete type

    kann mir da jemand helfen? bin am verzweifeln...

    hab auch schon versucht test mit extern in test2.c verfügbar zu machen - half aber alles nix.. was mache ich falsch?



  • struct test
    {
    int id;
    } teststruct;

    in eine Header Datei packen und in beiden *.c Dateien

    #include "test.h"

    machen.



  • deine fehlermeldungen passen nicht zum geposteten code.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-136013.html



  • c.rackwitz schrieb:

    deine fehlermeldungen passen nicht zum geposteten code.

    Nicht? Sehen aber so aus als könnten sie.



  • in seinen geposteten fehlermeldungen steht etwas von "warning: struct mail declared inside parameter list" und davon les ich nichts im code.
    ausserdem les ich da ne fehlermeldung von wegen pointern und da hab ich keine fehler entdeckt...

    kleiner hinweis: nicht nur gegen jemanden argumentieren, sondern auch mal zu dessen gunsten.



  • Wenn du mail durch test ersetzt passt es.

    ausserdem les ich da ne fehlermeldung von wegen pointern und da hab ich keine fehler entdeckt...

    Da steht, dass ein Pointer auf einen unvollständigen Typ dereferenziert wird, und genau das passiert auch: testptr->id



  • Bashar schrieb:

    Wenn du mail durch test ersetzt passt es.
    Da steht, dass ein Pointer auf einen unvollständigen Typ dereferenziert wird, und genau das passiert auch: testptr->id

    sorry, ich versteh nicht, was mit "unvollstaendig" bei einem int [edit: oder struct dingsbums*] gemeint sein koennte. kannst du dir das erklaeren?



  • c.rackwitz schrieb:

    sorry, ich versteh nicht, was mit "unvollstaendig" bei einem int [edit: oder struct dingsbums*] gemeint sein koennte. kannst du dir das erklaeren?

    Klar. Es gibt vollständige und unvollständige Typen (complete und incomplete). Strukturen, von denen bisher nur eine Deklaration, aber noch keine Definition, vorgekommen ist, sind unvollständige Typen. Sie können damit nur eingeschränkt verwendet werden, z.B. kann man mit Zeigern darauf arbeiten, aber nicht viel mehr.
    void gilt m.W. auch als unvollständiger Typ.



  • im klartext: der OP hat die volle deklaration der struktur nicht als header eingebunden.


Anmelden zum Antworten