Funktion mit demselben Namen, aber unterschiedlicher Signatur in der abgeleiteten Klasse

Ich habe eine Funktion mit dem gleichen Namen, aber mit unterschiedlicher Signatur in einer Basis-und abgeleitete Klassen. Wenn ich versuche, mit den base Klasse s-Funktion in einer anderen Klasse erbt die abgeleitete, erhalte ich eine Fehlermeldung. Siehe den folgenden code:

class A
{
    public:
    void foo(string s){};
};

class B : public A
{
    public:
    int foo(int i){};
};

class C : public B
{
    public:
    void bar()
    {
        string s;
        foo(s);
    }
};

Erhalte ich die folgende Fehlermeldung vom gcc-compiler:

In member function `void C::bar()': no matching function for call to `C::foo(std::string&)' candidates are: int B::foo(int)

Wenn ich entfernen int foo(int i){}; aus der Klasse B oder wenn ich es umbenennen von foo1 funktioniert alles einwandfrei.

Was ist das problem mit diesem?

Kommentar zu dem Problem
Technisch ein Duplikat von diese Frage aber dafür hat man einen besseren Titel und Antworten. Kommentarautor: Troubadour

InformationsquelleAutor der Frage Igor Oks | 2009-01-04

Schreibe einen Kommentar