Kein Zugriff auf private struct



  • class A{
    
      private:
      struct data{...};
    
      friend class B;
    };
    
    class B{
    
      funktion () { A::data oData;}
    
    };
    

    trozt friend deklaraion keine zugriff auf den data aus klasse A!!

    Fehler:
    c:\Dokumente und Einstellungen\Boris\Eigene Dateien\Visual Studio-Projekte\simulator\SystemFramework.h(143): error C2248: 'CSystemFramework::m_SBlock': Kein Zugriff auf private struct, dessen Deklaration in der Klasse "CSystemFramework" erfolgte



  • Welchen Compiler benutzt du denn? g++3.4.5 und VC++8 führen das folgende Beispiel anstandslos aus:

    #include <iostream>
    using namespace std;
    
    class A
    {
    private:
        struct data { int x, y; };
        friend class B;
    };
    
    class B
    {
    public:
        void test()
        {
            A::data oData = {47, 11};
            cout << oData.x << ", " << oData.y << "\n";
        }
    };
    
    int main()
    {
        B b;
        b.test();
    }
    


  • Hallo,
    einige Compiler bekommen Probleme, wenn die als friend deklarierte Klasse zuvor nicht deklariert wurde.
    Versuch's mal so:

    #include <iostream>
    using namespace std;
    
    class B; // <- vorher deklarieren
    
    class A
    {
    private:
        struct data { int x, y; };
        friend class B;
    };
    
    class B
    {
    public:
        void test()
        {
            A::data oData = {47, 11};
            cout << oData.x << ", " << oData.y << "\n";
        }
    };
    
    int main()
    {
        B b;
        b.test();
    }
    

    Ansonsten wäre es schön, wenn du mal ein *minimales* Beispiel posten würdest, bei dem der Fehler noch auftritt.


Anmelden zum Antworten