Stefan H.: C++ unbekannter fehler mit static const char...

guten abend,

in einer klasse führe ich folgende deklaration durch:

...
      private:
              static const int menutopics=4;
              static const int menulen=41;
              static const char menupoint[menutopics][menulen]={"Neue Tabelle ertsellen","Vorhandene Tabelle anzeigen","Vorhandene Tabelle bearbeiten/loeschen","Programm beenden"};
...

wenn ich das programm dann ohne benutzung von menupoint kompiliere, bekomme ich keinen fehler, jedoch folgender aufruf in einer methode des selben objekts:

...
cout << menupoint[1];
...

verursacht folgenden fehler mit dev-c++ version 4 (im "Linker"):
... undefined reference to '*Klassenname*::menupoint'

vielen dank für konstruktive kritik

  1. Hallo.

    Auf static-Attribute kann man nur von static-Methoden aus zugreifen.
    Da die Attribute auch onch als private deklariert wurden, sogar nur
    von Methoden der selben Klasse.

    Gruß
    L00NIX

    1. vielen dank für deine ausgezeichnete hilfe.
      an deiner bereits 2. auskunft erkenne ich, dass du ein besonders informierter c++ programmierer sein musst.

      ich würde mich freuen, wenn wir zukünftig weiterhin in kontakt bleiben könnten, und uns gegenseitig austauschen würden (ich bin web-developer).

      falls du interesse an einer solchen kooperation hättest, kannst du dich hier nochmals melden, sodass wir unsere e-mail adressen austauschen können.

      vielen dank.

      1. Hi.

        vielen dank für deine ausgezeichnete hilfe.

        Gern geschehen.

        an deiner bereits 2. auskunft erkenne ich, dass du ein besonders
        informierter c++ programmierer sein musst.

        Man tut, was man kann. ;-)

        ich würde mich freuen, wenn wir zukünftig weiterhin in kontakt
        bleiben könnten, und uns gegenseitig austauschen würden (ich bin »» web-developer).
        falls du interesse an einer solchen kooperation hättest, kannst du
        dich hier nochmals melden, sodass wir unsere e-mail adressen
        austauschen können.

        Ich kann dir erstmal noch ein weiteres Forum empfehlen, dass sich
        mit Programmierfragen befasst: http://www.mrunix.de/forums/index.php

        Dort gibt es sicher mehr Leute, die antworten auf deine Fragen haben,
        da C++ nicht gerade die Sprache für Webanwendungen ist.

        Gruß
          L00NIX

        1. moment:

          wenn ich die methoden als static deklariere, bekomme ich immernoch die selbe fehlermeldung (notiz: ich hab in dieser klasse nur static attribute).

          und zudem:
          http://cplus.about.com/od/beginnerctutorial/l/aa080802d.htm

          da steht, dass die methoden nicht statisch sein müssen.
          statische methoden können nur statische attribute verändern, aber keine non-static att. non-static methoden könne auf alle att. zugreifen.

          1. Hallo

            da steht, dass die methoden nicht statisch sein müssen.
            statische methoden können nur statische attribute verändern, aber
            keine non-static att. non-static methoden könne auf alle att.
            zugreifen.

            Richtig, ich habe es gerade getestet.

            Das geht aber nur bei public deklarierten static Attributen.
            Du hast mit Sicherheit die Initialisierung vergessen:

            class A
            {
            private:
                static int zahl;

            public:
                static int get_zahl()
                    {
                        return zahl;
                    }
            };

            // Initialisierung
            int A::zahl = 0;

            Gruß
            L00NIX

            1. ach muss die etwa extern geschehen?
              ich hatte das bisher intern... wusste nicht, dass das was ausmacht.
              werde es gleich testen. danke.

              1. ach muss die etwa extern geschehen?

                Also mein G++ meldet:
                ISO C++ forbids in-class initialization of non-consten. danke.

                Also: Ja ;o)

                1. bei mir steht immer ANSI statt ISO
                  wie bekomme ich das weg? (dev-c++ version 4)

                  1. Hallo

                    bei mir steht immer ANSI statt ISO
                    wie bekomme ich das weg? (dev-c++ version 4)

                    Was ist dev-c++ v4?

                    Visual Studio? Borland C++ Builder? Irgendeine Freeware?

                    Kenne ich nicht. Aber das mit dem ANSI und ISO sollte kein Problem
                    darstellen, so lange alle möglichen Warnungen aktiviert sind.

                    Jetzt frage mich aber nicht, wie man diese Warnungen einschaltet, beim g++ ist es -Wall.

                    Gruß
                    L00NIX

                    1. habe das nur erwähnt, da ich nicht diese fehlermeldung (die du erwähnt hast) erhalten habe. wär ja sonst peinlich, wenn ich mich trotzdem im forum melden würde... ;-)

                      1. habe das nur erwähnt, da ich nicht diese fehlermeldung (die du
                        erwähnt hast) erhalten habe. wär ja sonst peinlich, wenn ich mich »» trotzdem im forum melden würde... ;-)

                        Kannst du auch nicht.Deine statischen Variablen sind ja konstant
                        (const). Habe wohl nicht richtig gelesen. :-/