Vererbungsproblem



  • Hallo zusammen,

    ich habe ein komisches Vererbungsproblem und hoffe, dass ihr mir helfen könnt. Ich habe eine Klasse A, welche folgende Funktionen definiert:

    void foo(AST* ast);
    virtual void foo(AST* ast, bool flag, int cnt)=0;
    

    wobei das erste foo in A auch definiert wird. Nun habe ich eine Klasse B, welche von A erbt, ala:

    public B: public A{
    
    using A::foo;
    void B::foo(AST* ast, bool flag, int cnt){
    ...
    }
    }
    

    Wenn ich in meiner mein schreibe:

    A *a;
    B b;
    a = &b;
    a->foo(ast, true, 0);
    

    geht und läuft es wunderbar. Mache ich daraus:

    A *a;
    switch(whatA}{
    
    case typeB:
     B b;
     a = &b;
     break;
    case typeC:
     ...
    }//End switch
    
    a->foo(ast, true, 0);
    

    bekomme ich ne Exception: pure virtual method called ...

    Warum ????? Jemand nen Tip?

    Danke. Uwe



  • uwerothfeld schrieb:

    Warum ????? Jemand nen Tip?

    Reduzier Dein Problem auf ein kleines, komplettes und kompilierbares Programm. Anhand der Code-Fetzen mit Syntaxfehlern kann man das schlecht sagen.

    Gruß,
    SP



  • uwerothfeld schrieb:

    Hallo zusammen,

    ich habe ein komisches Vererbungsproblem und hoffe, dass ihr mir helfen könnt. Ich habe eine Klasse A, welche folgende Funktionen definiert:

    void foo(AST* ast);
    virtual void foo(AST* ast, bool flag, int cnt)=0;
    

    wobei das erste foo in A auch definiert wird. Nun habe ich eine Klasse B, welche von A erbt, ala:

    public B: public A{
    
    using A::foo;
    void B::foo(AST* ast, bool flag, int cnt){
    ...
    }
    }
    

    Wenn ich in meiner mein schreibe:

    A *a;
    B b;
    a = &b;
    a->foo(ast, true, 0);
    

    geht und läuft es wunderbar. Mache ich daraus:

    A *a;
    switch(whatA}{
    
    case typeB:
     B b;
     a = &b;
     break;
    case typeC:
     ...
    }//End switch
    
    a->foo(ast, true, 0);
    

    bekomme ich ne Exception: pure virtual method called ...

    Warum ????? Jemand nen Tip?

    Danke. Uwe

    Wie's aussieht, zeigt a beim Aufruf der Methode auf ein Objekt, das es schon gar nicht mehr gibt...



  • upps, wie peinlich, stimmt. das passiert, wenn man copy & past macht. ei ei. ich geh mich mal in die ecke stellen und schämen 😉 vielen dank!

    uwe


Anmelden zum Antworten