(C++) konstante Elemente in Struktur



  • wieso können MSVC und GNUC(da lief es jetzt jahrelang) das und der BCB gibt die Fehler?

    [C++ Fehler] Unit1.cpp(36): E2232 Konstante-Element 'MENUE_VAR_TYP::ADRESSE' in Klasse ohne Konstruktoren
    [C++ Fehler] Unit1.cpp(36): E2232 Konstante-Element 'MENUE_VAR_TYP::test_funktion' in Klasse ohne Konstruktoren
    ??

    enum TEST_FUNKTION_VAR
    {
      QWE,
      RTZ,
      ZUI,
    };
    
    struct MENUE_VAR_TYP
    {
      unsigned char XPOS;
      unsigned char YPOS;
      const void* const ADRESSE;
      unsigned char INDEX;
      unsigned char MAX_FELD;
      void (* const test_funktion)(TEST_FUNKTION_VAR komplett);
    };
    
    const MENUE_VAR_TYP foo[] =
    {
      {1, 2, 0, 0, 0, 0}
    };
    

    Der Fehler scheint mir mit der stuctdeklaration ein wenig verfrüht zu kommen da er doch noch garnich weiss wie ich die Dinger deklariere =[ .

    [ Dieser Beitrag wurde am 19.03.2003 um 12:10 Uhr von dreaddy editiert. ]



  • was ist das denn bitteschön??? const xxx const???

    const void* const ADRESSE;
    
    // probiers mal hiermit
    struct MENUE_VAR_TYP
    {
      unsigned char XPOS;
      unsigned char YPOS;
      const void *ADRESSE;
      unsigned char INDEX;
      unsigned char MAX_FELD;
      const void (*test_funktion) (TEST_FUNKTION_VAR komplett);
    };
    

    [ Dieser Beitrag wurde am 19.03.2003 um 15:13 Uhr von Sunday editiert. ]



  • naja du kannst bei pointern 2 Sachen konst machen...
    Einmal den Zeiger ansich und einmal den Inhalt.

    sprich beim einen const geht
    zeiger = 0x234234; nicht
    und beim andern geht
    *zeiger = 123;
    nicht

    Das es geht wenn das zweite const weg ist ist mir klar 😃 aber leider muss ich alten Programmcode nehmen und wenn ich das weglassen würde müsste ich abgesehen von der wegfallenden Sicherheit so um die 20000 Programmzeilen ändern

    [ Dieser Beitrag wurde am 19.03.2003 um 16:30 Uhr von dreaddy editiert. ]



  • Ich verschieb das mal nach "C++", um zu klären, ob hier dein Code/MSVC/GNUC oder der BCB vom Standard abweichen.

    Anbei noch der entsprechende Eintrag aus der Borland-Hilfe:

    Eine Klasse, die konstante oder Referenzelemente (oder beides) enthält, muß mindestens einen benutzerdefinierten Konstruktor haben.

    Ansonsten gäbe es keine Möglichkeit, solche Elemente zu initialisieren.


Anmelden zum Antworten