private member of anonymous struct in union



  • Hi,
    Ich möchte innerhalb eines Speicherbereiches einige Register durch überlagern mit einer Klasse oder Stucktur ansprechen.Warum kann ich meine offsets-variablen nicht vor Zugriff schützen (noch lieber wäre es mir sie garnicht erst zu benennen).

    typedef char uint8_t;
    class test
    {
    	union
    	{
    		struct{
    			private:
    				uint8_t _offset_ra[7];
    			public:
    				uint8_t registera;
    		};
    		struct{
    			private:
    				uint8_t _offset_rb[6];
    			public:
    				uint8_t registerb;
    		};
    	};
    };
    

    gcc meldet beim beispiel:

    error: private member ‘uint8_t test::<anonymous union>::<anonymous struct>::_offset_ra [7]’ in anonymous union
    

    und entsprechendes für _offset_rb

    Gruß



  • k_the_first schrieb:

    typedef char uint8_t;
    class test
    {
    	union
    	{
    		struct{
    			private:
    				uint8_t _offset_ra[7];
    			public:
    				uint8_t registera;
    		} s1;
    		struct{
    			private:
    				uint8_t _offset_rb[6];
    			public:
    				uint8_t registerb;
    		} s2;
    	} un;
    };
    

    Dann probiers mal so, wobei du un möglicherweise auch weglassen kannst, heißt, dass du der union nicht unbedingt einen Namen geben musst. Bin mir da aber gerade nicht sicher, wie das bei C++ aussieht.



  • Mit benannten Strukturen akzeptiert es der Compiler, leider passt das nicht zum Rest des Codes da ich an anderer Stelle diereckt mit

    test instance;
    instance.registera = 27;
    

    darauf zugreife, ohne private: akzeptiert der Compiler es ebenfalls nur erlaubt das den Zugriff auf den Offset was ich gern verhindern möchte.



  • Eine union darf nur PODs als Member enthalten. Da du das Schlüsselwort private in den struct s verwendest, hast du keinen POD mehr.


Anmelden zum Antworten