Probleme mit Funktionszeiger in einer Struktur



  • Hallo Leutz,

    ich habe da ein Problem bei dem zugriff auf eine Struktur mit einem Funktionszeiger.

    struct abc {
       int (*func) ();
    };
    
    abc* bla = new abc();
    bla->func=NULL;
    

    wenn ich den Zeiger initizialisieren will schmeißt mir der Kompiler immer diese fehlermeldung um die ohren.

    1> ... : error C2143: syntax error : missing ';' before '->'
    1> ... : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1> ... : error C2040: 'bla' : 'int' differs in levels of indirection from 'abc *'
    

    pls help 😉



  • abc* bla = new abc(); 
     bla->func=NULL;
    

    Steht mit Sicherheit in einem Funktionsrumpf oder?



  • Arbeitest du mit einem C-Compiler? (wenn ja, bist du hier erstens im falschen Board gelandet - und mußt zweitens struct abc* bla schreiben)



  • CStoll schrieb:

    Arbeitest du mit einem C-Compiler? (wenn ja, bist du hier erstens im falschen Board gelandet - und mußt zweitens struct abc* bla schreiben)

    Arbeite mit nem C++-Compiler. (sonst würde er ja schon bei new aufschreien)

    bla->func = NULL;
    

    soll nur ein Test sein, ob ich überhaupt was zuweisen kann. Das ist auch die Stelle wo er sich beklagt. ne Idee, woran es liegen könnte? wie würdet ihr es machen?



  • Du hast mir nicht geantwortet... WO stehen die 2 Zeilen konrekt in deinem Code?



  • @CStoll: Nein, das muss ein C++ Compiler sein, ansonsten gäb es nicht eine Fehlermeldung die auf C++ hinweist...

    struct abc {
       int (*func) ();
    };
    
    int main()
    {
      abc* bla = new abc();
      bla->func=NULL;
      return 0;
    }
    

    Dieser Code oben Compilert bei mir ohne Probleme. Die Fehlermeldungen scheinen auch nicht allesamt in diesem Kontext zu fallen.

    cu André



  • Ups, das new habe ich glatt übersehen. Dann bleibt noch David's Frage übrig: Stehen diese Anweisungen frei im Raum oder im Inneren einer Funktion (ersteres ist nicht erlaubt - bla->func=NULL; ist keine Deklaration)?



  • asc schrieb:

    ...

    struct abc {
       int (*func) ();
    };
    
    int main()
    {
      abc* bla = new abc();
      bla->func=NULL;
      return 0;
    }
    

    ...

    Hm, das macht er auch bei mir auch ohne probleme.Aber bla soll global sein. (@David_pb siehe ganz oben 😉 ) Wenn ich es wie folgt schreibe, funzt es auch.

    struct abc {
       int (*func) ();
    };
    
    abc* bla;
    
    int main()
    {
      bla = new abc();
      bla->func=NULL;
      return 0;
    }
    

    Also werde ich das jetzt wohl so machen.



  • Das bla global sein soll rechtfertig nicht das bla->func=NULL; auch irgendwo außerhalb eines Funktionsblocks rumvegetiert. 😛


Anmelden zum Antworten