Probleme mit einem Zeiger in "private"



  • Hallo Leute,

    ich habe hier eine Klasse deren Standardkonstruktor ein Pointer übergeben wird. Dieser Pointer zeigt auf einen Vektor. Der Vektor wiederum nimmt Pointer des Typs "Bar_t" auf.

    class Foo_t {
    
        public:
            Foo_t(std::vector<Bar_t *> *);
        ...
    };
    

    Weiter besitzt die Klasse einen eigenen Pointer in "private". Dieser Pointer ist vom selben Typ wie der o.g. Pointer.

    class Foo_t {
    
        public:
            Foo_t(std::vector<Bar_t *> *);
        ...
        private:
            std::vector<Bar_t *> *itsBar;
    };
    

    Der Standardkonstruktor kopiert den übergebten Pointer auf den Pointer aus "private".

    Foo_t::Foo_t(std::vector<Bar_t *> *bar) {
    
    	itsBar = bar;
    }
    

    Soweit ist alles Ok. Aber die Klasse besitzt noch eine Methode in "public" die auf den Pointer aus "private" zugreift. Die vollständige Klasse sieht dann so aus:

    class Foo_t {
        public:
            Foo_t(std::vector<Bar_t *> *);
    
        public:
            std::string GetBar();
    
        private:
            std::vector<Bar_t *> *itsBar;
    };
    

    Und die vollständigen Klassendeklarationen sehen so aus:

    Foo_t::Foo_t(std::vector<Bar_t *> *bar) {
    
    	itsBar = bar;
    
    Foo_t::~Foo_t() {
    
    }
    
    std::string
    Foo_t::GetBar() {
    
        std::cout << "Die Adresse des Pointers \"itsBar\" lautet: "
                  << &itsBar << std::endl;
    }
    

    Kompiliere ich das ganze mit dem GNU C++ Compiler bekomme ich folgende Fehlermeldung:

    Fehler: »itsBar« wurde in diesem Gültigkeitsbereich nicht definiert

    Die dabei ausgegebene und hier nicht aufgeführte Zeilennummer bezieht sich auf GetBar().

    Warum kann der Standardkonstruktor dem Pointer auf eine übergebene Adresse biegen aber GetBar() nicht einmal die Pointeradresse ausgeben?

    Für jeden Hinweis dankbar.

    Goran

    public:
    std::string GetBlub();

    private:
    std::vector<vector<Bla_t> *> *itsBla;



  • goran schrieb:

    Foo_t::Foo_t(std::vector<Bar_t *> *bar) {
    
    	itsBar = bar;
    
    // <-- C&P-Fehler oder fehlt hier wirklich das } ?!
    
    Foo_t::~Foo_t() {
    
    }
    
    std::string
    Foo_t::GetBar() {
    
        std::cout << "Die Adresse des Pointers \"itsBar\" lautet: "
                  << &itsBar << std::endl;
    }
    


  • Das war ein C&P Fehler. 🙄



  • Ist das wirklich der einzige Fehler, den der gcc ausspuckt? Kann ich mir kaum vorstellen...


Log in to reply