Anzeige:
Ergebnis 1 bis 6 von 6

Thema: GCC und virtuelle Funktionen

  1. #1
    Registrierter Benutzer Avatar von mrsuicide
    Registriert seit
    11.04.2003
    Beiträge
    38

    Question GCC und virtuelle Funktionen

    Ich habe ein komisches Problem mit virtuellen Funktionen.

    Mein Code sieht ungefähr so aus:
    Code:
    class Base {
    public:
    Base();
    ~Base();
    void TestA();
    void TestB();
    protected:
    virtual void A() { printf("Fehler 1\n"); }
    virtual void B() { printf("Fehler 2\n"); }
    };
    
    class Child : public Base {
    protected:
    void A();
    void B();
    }
    
    void Base::TestA() {
    A();
    }
    
    void Base::TestB() {
    B();
    }
    
    void Child::A() {
    printf("OK 1\n");
    }
    
    void Child::B() {
    printf("OK 2\n");
    }
    
    int main() {
    Child *c = new Child();
    c->TestA();
    c->TestB();
    delete c;
    return 0;
    }
    Nun bekomme ich eine komische Ausgabe:
    Code:
    Ok 1
    Fehler 2
    GCC-Bug?
    Geändert von mrsuicide (08-09-2004 um 11:37 Uhr)
    GreeZ,
    Mr. Suicide!

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Also dein Code liefert mir bei zwei verschiedenen gcc Versionen beidemale OK 1;OK 2 als Ausgabe.
    Da zwischen den Methoden A und B kein Unterschied besteht, das gcc sie unterschiedlich handhaben sollte, liegt der Fehler sicherlich woanders.

    Bist du sicher, das in deinem Code an beiden Methoden virtual dransteht?
    Oben schreibst du "Mein Code sieht ungefähr so aus", sieht er vielleicht doch etwas anders aus?

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Also nach einigen Änderungen weil sich das Teil sonst gar nicht kompilieren lassen will gibt das bei mir das aus:
    Code:
    OK 1
    OK 2
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer Avatar von mrsuicide
    Registriert seit
    11.04.2003
    Beiträge
    38
    Kann es sein ,dass es Einfluss hat, wenn die beiden Klassen in verschiedenen Units liegen?
    GreeZ,
    Mr. Suicide!

  5. #5
    Registrierter Benutzer Avatar von mrsuicide
    Registriert seit
    11.04.2003
    Beiträge
    38
    Ahhhh!!!...Es passiert nur, weil ich TestB() aus einer Fkt. von Base aufgerufen habe!
    GreeZ,
    Mr. Suicide!

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Na so was

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •