[std::pair]Warum keinen Basepointer als Parameter?



  • Ich habe eine std::map

    std::map<int, ABC*>
    

    Ich wollte jetzt ein Objekt vom Typ ABCa einfuegen.
    ABCa ist abgeleitet von ABC.
    [cpp]
    class ABC
    {
    public:
    virtual int foo()=0;
    };

    class ABCa : public ABC
    {
    public:
    virtual int foo();
    };

    int main()
    {
    std::map<int,ABC*> Map;
    Map.insert(std::pair<int,ABC*>( 5, ABCa() ) ); //error
    }
    [/cpp]
    Das klappt so nicht.
    Es klappt nur so:

    int main()
    {
        std::map<int,ABC*> Map;
        Map.insert(std::pair<int,ABCa>( 5, ABCa() ) );  // kein error - klappt
    }
    

    Warum klappt erstere Variante nicht?



  • Hi,

    du übergibts ja auch das Objekt direkt und nicht die Adresse. So wie du das gepostet hast, kann ich mir nicht vorstellen, dass die 2. Variante funktioniert. Bei mir gibts nämlich einen error.



  • int main()
    {
        std::map<int,ABC*> Map;
        ABC* a=new ABCa;
        Map.insert(std::pair<int,ABC*>( 5,a);  // kein error - klappt
    }
    

    wer pointer als typ angibt, sollte schon pointer übergeben 😉


Anmelden zum Antworten