Announcement

Collapse
No announcement yet.

Delphi5 -> Delphi6 und const

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi5 -> Delphi6 und const

    Hallo,<BR><BR>irgendwie verstehe ich Delphi6 Prof deutsch (auf WinXP Home) nicht. Folgendes Problem tritt bei mir auf bei neuen Projekten auf:<PRE>procedure TForm1.FormActivate(Sender: TObject);
    const erster : boolean = True;
    begin
    if erster then
    begin
    erster := False; { hier erscheint die Fehlermeldung, dass der linken Seite nichts zugewiesen werden kann }
    ....
    end;
    end;</PRE>Allerdings hatte es bei meinen bisherigen Projekten funktioniert bzw. funktioniert immer noch.<BR>
    Hat jemand eine Idee, woran das liegt (falsche Einstellungen, falsche Reihenfolge der Einbindung der Units).<BR><BR>Gruß Stephan<BR>

  • #2
    Hallo Stephan,

    Du hast, Du hast "erster" als Konstante definiert, einer Konstanten kann nicht zugewiesen werden!

    Gruß Bernhar

    Comment


    • #3
      Soweit ich weiß, war bis D5 {$WRITEABLECONST ON} die Compiler-Defaulteinstellung, seit D6 ist es {$WRITEABLECONST OFF} - d.h. wenn du an den Einstellungen nichts drehst, sind Delphi-Konstanten jetzt *noch öfter* wirklich konstant als früher! ;-)
      <br>Ciao, Uli

      Comment


      • #4
        @Ulich: Durch deine Info ist mir aufgefallen, das ich nur in den Projektoptionen "Zuweisbare typisierte Konstanten" aktivieren muss. Dann wird der Schalter {$J+} bzw. {$WRITEABLECONST ON} gesetzt.<BR><BR>Schönen Dank<BR><BR>Gruß Stephan<BR&gt

        Comment


        • #5
          Obwohl es geht ist die Nutzung einer Konstante als Variable wirklich BESCHISSENER Programmierstil. Was spricht gegen eine lokale Variable? Die Konstante wird sowieso bereits als Variable implementiert

          Comment


          • #6
            Ach so, const ergibt eine globale Variable, aber warum platziest du sie nicht in den privaten Elementen deiner Form? Dort schreibe ich sie immer rein. Der Vorteil ist, das man mehrere Instanzen der Form haben kann, die dann auch jede einzeln einmal initialisiert. Bei der const-Loesung initialisiert nur die erste Instanz

            Comment


            • #7
              @Robert, vielleicht ist ja genau dies gewollt ?
              <i>Konstante als Variable wirklich BESCHISSENER Programmierstil</i>, korrekt, aber was soll man machen wenn keine globalen variablen vorinitialisiert werden können die lokal zu einer procedure sind ? Obiges geht nur über const.

              Hage

              Comment


              • #8
                Der Compiler-Schalter ist (IMHO) eigentlich zur Hilfe bei Übersetzungen von C(++)-Quellen gedacht.<br>
                <pre><p><b>void</b> foo()
                {
                <b>static int</b> i = 0;
                i++;
                }</p></pre>
                <pre><p><b>procedure</b> foo();
                <b>const</b>
                i: Integer = 0;
                <b>begin</b>
                Inc(i);
                <b>end</b>;</p></pre>

                - nic

                Comment


                • #9
                  Na in diesem Fall geht es auch mit einer globalen Variablen. Man muss nur die Logik umdrehen. Eine globale Variable ist mit 0 (= False) initialisiert

                  Comment


                  • #10
                    Eine globale Variable kann man auch explizit initialisieren.
                    <br>Uli

                    Comment


                    • #11
                      Erst mal lesen. Globale Variable aber nur in der Prozedur sichtbar. Na darauf kann man auch verzichten. Eine unit-globale Variable ist immer noch besser als Konstanten vergewaltigen

                      Comment


                      • #12
                        Geschmackssache in sehr wenigen Ausnahmen, vielleicht zwei, habe ich sie bisher einer Unitlokalen Variable vorgezogen.<br>
                        Aus Sicht der Sauberkeit sollten aber in jedem Fall solche procedurelokalen Konstanten vermieden werden, das ist Fakt.

                        Gruß Hage

                        Comment

                        Working...
                        X