problem mit vector



  • Hallo!

    folgende Situtation:

    class Mutterklasse
    {};
    class Kindklasse : Mutterklasse
    {};
    

    Kann ein vector<Mutterklasse> nicht auch Objekte von Kinderklasse speichern?

    Bei mir kommt folgender Compilerfehler:
    "error C2243: 'type cast' : conversion from 'CreateReg *__w64 ' to 'const InstallerObject &' exists, but is inaccessible"



  • So weit ich weiß, geht das nicht, da Du in der Kindklasse ja z.B. Variablen und Methoden hinzufügen kannst und sie somit nicht mehr identisch zur Mutterklsse wären.

    Ansonsten probier es doch in ein Paar Zeilen Code mal explizit aus.



  • Orillion schrieb:

    Kann ein vector<Mutterklasse> nicht auch Objekte von Kinderklasse speichern?

    geht nicht. das führt nur zu fehlern. ist nämlich fehleranfällig, grausam und gemein. schlag in deinem bich mal im kapitel "was man nicht machen soll" auf, da steht das drin. zuerst erwischt dich das slicing. dann speicherlöcher, dann schutzverletungen wegen falscher adressrechnung. und in wenigen wochen biste reif für die insel.

    aber mach doch mal vector<Mutterklasse>*!
    das darfste machen und sollst es sogar. hier kann nix schiefgehen. du hast ja nicht vergessen, den destruktor der mutterklasse vortuell zu machen?



  • vector< boost::shared_ptr<Mutterklasse> >



  • ausserdem musst du public erben von der mutterklasse.



  • Klar geht das! Du mußt auch public ableiten, du hast es aber private "abgeleitet", was ja "implementiert-als" heißt.

    class Mutterklasse
    {
    public:
    virtual ~Mutterklasse();   // Auch einen virtuellen Destruktor, damit es polymorph wird...
    };
    class Kindklasse : public Mutterklasse // public haste hier vergessen!!!
    {};
    

    Dann würde ich noch in der Basisklasse mind. eine Methode virtual machen, damit es polymorph wird.



  • Übrigens, in der MSDN wird der fehler beschrieben, einfach den Fehlercode C2243 in den MSDN-Index eingeben, der Code wird nicht aus Spaß vom Compiler ausgegeben.



  • boost::killer schrieb:

    vector< boost::shared_ptr<Mutterklasse> >

    sowas ist nicht schlimm volkard



  • boost::killer schrieb:

    boost::killer schrieb:

    vector< boost::shared_ptr<Mutterklasse> >

    sowas ist nicht schlimm volkard

    für javaisten vielleicht.



  • Danke für die Antworten! Jetzt klappts!


Anmelden zum Antworten