Zwei Klassen aus verschiedenen Namespaces "befreunden"



  • Hallo, oder besser gesagt: Guten Morgen! 🙂

    Ich habe zwei Klassen, die in verschiedenen Namespaces liegen. Alles spielt sich in einem Ordner ab.

    namespace viecher
    - class Viech

    namespace schnapper
    - class Schnapper

    Nun möchte ich mein Viech mit dem guten Schnapper befreunden, sodass ein Schnapper die privaten Attribute eines Viechs zugreifen kann.

    Die Klasse Viech ist sehr simpel:

    //Viech.h
    
    #ifndef VIECHER_H_
    #define VIECHER_H
    
    namespace viecher
    {
        class Viech
        {
            public:
    	      Viech();
    
    	    private:
    	      int beine;
    
    	    friend class Schnapper;
        };
    }
    
    #endif
    

    Also nur ein Viech mit privaten Beinen. Die Implementation ist nicht mal nennenswert:

    //Viech.cpp
    
    #include "Viech.h"
    
    namespace viecher
    {
        Viech::Viech() : beine(5)
        {
        }
    }
    

    So weit, so gut. Nun gibt es noch die Klasse Schnapper, die versucht, auf die privaten Beine eines Viechs zuzugreifen:

    //Schnapper.h
    
    #ifndef SCHNAPPER_H_
    #define SCHNAPPER_H_
    
    namespace schnapper
    {
      class Schnapper
      {
          public:
    	    Schnapper();
      };
    }
    
    #endif
    

    Und die Implementation:

    //Schnapper.cpp
    
    #include <iostream>
    #include "Schnapper.h"
    #include "Viech.h"
    
    namespace schnapper
    {
        Schnapper::Schnapper()
        {
    	    viecher::Viech viech;
    	    viecher::Viech viech2;
    
    	    if (viech.beine == viech2.beine) //Compiler-Error
    		    std::cout << "TRUE!";
    
        }
    }
    

    Allerdings bekomme ich bei
    "int beine;" in "Viecher.cpp" die Fehlermeldung "‘int viecher::Viech::beine’ is private" und in "if (viech.beine == vieh2.beine)" in "Schnapper.cpp" die Meldung "within this context".

    Zusammengefasst sagen mir die Meldungen also:
    Du darfst in schnapper::Schnapper nicht auf die privaten Attribute von viecher::Viecher zugreifen.

    Wie löse ich das Problem?

    Danke im Voraus 🙂



  • ...


Anmelden zum Antworten