2009-04-14 15 views
2

私はずっと前に、ターボパスカル7でこれを行うことができたことを覚えています。要素が定数でなくても、両方のDelphiとFreePascalで配列のconstを宣言できますか?

多分私は間違っていますが、明確にする必要がありますが、定数として文字列の配列を宣言できますか?

オプション/回避策ではない場合。

type 
    TStates = (sOne, sTwo, sThree); 
var 
    TArrayOfString: array [sOne..sThree] of string = 
    ('State one', 'State two', 'State three'); 

が、constのでそのVARを交換したい:私は今持っている何

です。

おかげ

編集1は:私の質問を明確にするいくつかのより多くのコードを追加しました。古い日のパスカル/ Delphiで

+0

私もconstで動作します - 多少の情報を追加する必要がありますか? – mghie

+0

TYPEではないので、 "TArrayOfString"と呼ぶべきではありません。これはconst/varだ! – ulrichb

+0

私はあなたの質問を何度か読んできましたが、あなたが何を求めているのか正確には分かりません。そうでない場合は、私に知らせてください。 –

答えて

12

は完全に合法です:

const 
    TArrayOfString: array [1..3] of string = 
    ('String one', 'String two', 'String three'); 

自分の識別子名はしかしTで始まり、なぜ私は好奇心旺盛です。あなたはこのようなタイプを定義しようとしていた:

type 
    TArrayOfString = array [1..3] of string; 
const 
    MyArrayOfString: TArrayOfString = 
    ('String one', 'String two', 'String three'); 

あなたはのconstとして可変長配列(私の知る限り)を持つことができない、またあなたは未定義のタイプのそれを持つことができます。

これは、Delphi 2009. FreePascalを使用したYMMVです。

+0

あなたは** T **が奇妙なことについて正しいです。私は将来それを変えなければならない。 –

+0

新しいコードについてどう思いますか?これはDweettaの問題であることがわかります; –

+0

新しいコードでも動作します。私はいつも使っています。整数を列挙型で置き換えることができます。 –

4

あなたが書いた:

const 
    A : Integer = 5; 

をあなたは定数を定義しますが、初期化された変数ではありませんでした。

const 
    A : array [1..2] of string = ('a', 'b'); 

しかし、文字列は、あまりにも定数でなければならない:

あなたは問題なく定義することができます。彼らはコンパイル時に知る必要があります。

同じことのために行く:

var 
    A : array [1..2] of string = ('a', 'b'); 

だから、あなたが書き込むことはできません。

var 
    B : string = 'hi'; 
    A : array [1..2] of string = (B, 'b'); 

をBがVARですので。しかし、あなたは書くことができます。

const 
    B = 'hi'; // Even a typed constant does not work. 

var 
    A : array [1..2] of string = (B, 'b'); 

注オプションということ:「アサイナブルは、定数を入力した」(デフォルトはfalse)を割り当てることができ、古い時間型指定された定数を作成するために提供されます。下位互換性のためだけにあります。なぜなら、定数を一定にしたいからです。ただ、のconstVARを交換

+0

{$ J +}が設定されている場合でも、これは実行されます。 – mghie

+0

はい、割り当て可能な型付き定数(atc)を有効にするのと似ています。しかし、そうすることが良いのかどうか議論することができます;-)。 –

関連する問題